摘要:在中,和運算符用來比較兩個值是否相等,但是他們對于相等的定義是不同的。如果不是正常值比如拋出一個錯誤,中斷執(zhí)行。如果不是正常值,中斷執(zhí)行。如果與相同,執(zhí)行嚴格相等運算。如果為,或,為,則返回比較的結(jié)果。
在js中,"==" 和 "==="運算符用來比較兩個值是否相等,但是他們對于相等的定義是不同的。兩個運算符都可以用來比較任意類型的操作數(shù),如果兩個操作數(shù)相等,返回true,否則,返回false。"===" 嚴格相等運算符,用來比較兩個操作數(shù)是否嚴格相等。"==" 相等運算符,用來比較兩個操作數(shù)是否相等。
詳細信息可參照ECMA標準(戳這里)。
== 相等操作符,在比較前會把比較的兩個數(shù)轉(zhuǎn)換成相同的數(shù)據(jù)類型之后,然后對兩個數(shù)進行比較。轉(zhuǎn)換后,比較方式與 === 相同。
ECMA中比較規(guī)則如下:
The comparison x == y, where x and y are values, produces true or false. 1. ReturnIfAbrupt(x). 2. ReturnIfAbrupt(y). 3. If Type(x) is the same as Type(y), then Return the result of performing Strict Equality Comparison x === y. 4. If x is null and y is undefined, return true. 5. If x is undefined and y is null, return true. 6. If Type(x) is Number and Type(y) is String, return the result of the comparison x == ToNumber(y). 7. If Type(x) is String and Type(y) is Number, return the result of the comparison ToNumber(x) == y. 8. If Type(x) is Boolean, return the result of the comparison ToNumber(x) == y. 9. If Type(y) is Boolean, return the result of the comparison x == ToNumber(y). 10. If Type(x) is either String, Number, or Symbol and Type(y) is Object, then return the result of the comparison x == ToPrimitive(y). 11. If Type(x) is Object and Type(y) is either String, Number, or Symbol, then return the result of the comparison ToPrimitive(x) == y. 12. Return false.
翻譯如下:
比較 x == y,當x 和 y是正常值時,返回 true 或者 false。
如果x不是正常值(比如拋出一個錯誤),中斷執(zhí)行。
如果y不是正常值,中斷執(zhí)行。
如果Type(x)與Type(y)相同,執(zhí)行嚴格相等運算x === y。
如果x為null且y為undefined,則返回true。
如果x為undefined,y為null,則返回true。
如果Type(x)是Number,Type(y)是String,返回比較結(jié)果 x == ToNumber(y)。
如果Type(x)是String,Type(y)是Number,返回比較結(jié)果ToNumber(x)== y。
如果Type(x)為Boolean,則返回比較結(jié)果ToNumber(x)== y。
如果Type(y)為Boolean,則返回比較結(jié)果x == ToNumber(y)。
如果Type(x)為String,Number或Symbol,Type(y)為Object,則返回比較的結(jié)果x == ToPrimitive(y)。
如果Type(x)是Object,Type(y)是String,Number或Symbol,那么
返回比較結(jié)果ToPrimitive(x)== y。
返回假。
簡化一下 ,可以理解為:
如果兩個操作數(shù)類型相同,則進行 x===y。
如果一個為null,另一個為undefined,則返回true。
如果兩個操作數(shù)均為基本數(shù)據(jù)類型,則把操作數(shù)轉(zhuǎn)換為Number類型進行比較。
如果其中有一個操作數(shù)為Object,則調(diào)用對象的 toString 或者 valueOf 方法,將對象轉(zhuǎn)化為原始值進行比較。
如果不滿足上述任何情況,則返回 false。
Strict Equality Comparison "===""===" 嚴格相等操作符,用來比較兩個操作數(shù)是否嚴格相等。
ECMA中比較規(guī)則如下:
1. If Type(x) is different from Type(y), return false. 2. If Type(x) is Undefined, return true. 3. If Type(x) is Null, return true. 4. If Type(x) is Number, then a. If x is NaN, return false. b. If y is NaN, return false. c. If x is the same Number value as y, return true. d. If x is +0 and y is ?0, return true. e. If x is ?0 and y is +0, return true. f. Return false. 5. If Type(x) is String, then a. If x and y are exactly the same sequence of code units (same length and same code units at corresponding indices), return true. b. Else, return false. 6. If Type(x) is Boolean, then a. If x and y are both true or both false, return true. b. Else, return false. 7. If x and y are the same Symbol value, return true. 8. If x and y are the same Object value, return true. 9. Return false.
翻譯:
如果Type(x)與Type(y)不同,則返回false。
如果Type(x)為Undefined,則返回true。
如果Type(x)為Null,則返回true。
如果Type(x)是Number,那么
如果x是NaN,則返回false。
如果y是NaN,則返回false。
如果x與y的Number值相同,則返回true。
如果x為+0且y為-0,則返回true。
如果x是-0而y是+0,則返回true。
返回假。
如果Type(x)是String,那么
如果x和y是完全相同的代碼單元序列(相同長度和相應索引處的相同代碼單位),則返回true。
否則返回假。
如果Type(x)為Boolean,則
a.如果x和y都為true或都為false,則返回true。
b.否則返回假。
如果x和y是相同的符號值,則返回true。
如果x和y是相同的Object值,則返回true。
返回假。
簡化一下,可以理解為:
如果兩個操作數(shù)類型不相同,返回false。
undefined === undefined => true
null === null => true
如果操作數(shù)的數(shù)據(jù)類型都為Number,當兩個數(shù)的值相同時,返回true, 否則返回 false。
注: -0 === +0 => true +0 === -0 => true NaN 與任何值都不相等,包括他自己。 所以要判斷一個數(shù)值是否為NaN, 可采用 x !== x ,只有NaN 返回true
如果操作數(shù)的數(shù)據(jù)類型都為String或Boolean時,只有x和y完全相同,返回ture。
如果操作數(shù)的數(shù)據(jù)類型都為Object,只有兩個操作數(shù)指向的地址完全相同時,返回true,否則返回false。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/91859.html
摘要:理解的函數(shù)基礎(chǔ)要搞好深入淺出原型使用原型模型,雖然這經(jīng)常被當作缺點提及,但是只要善于運用,其實基于原型的繼承模型比傳統(tǒng)的類繼承還要強大。中文指南基本操作指南二繼續(xù)熟悉的幾對方法,包括,,。商業(yè)轉(zhuǎn)載請聯(lián)系作者獲得授權(quán),非商業(yè)轉(zhuǎn)載請注明出處。 怎樣使用 this 因為本人屬于偽前端,因此文中只看懂了 8 成左右,希望能夠給大家?guī)韼椭?...(據(jù)說是阿里的前端妹子寫的) this 的值到底...
摘要:正在失業(yè)中的課多周刊第期我們的微信公眾號,更多精彩內(nèi)容皆在微信公眾號,歡迎關(guān)注。若有幫助,請把課多周刊推薦給你的朋友,你的支持是我們最大的動力。是一種禍害譯本文淺談了在中關(guān)于的不好之處。淺談超時一運維的排查方式。 正在失業(yè)中的《課多周刊》(第3期) 我們的微信公眾號:fed-talk,更多精彩內(nèi)容皆在微信公眾號,歡迎關(guān)注。 若有幫助,請把 課多周刊 推薦給你的朋友,你的支持是我們最大的...
摘要:正在失業(yè)中的課多周刊第期我們的微信公眾號,更多精彩內(nèi)容皆在微信公眾號,歡迎關(guān)注。若有幫助,請把課多周刊推薦給你的朋友,你的支持是我們最大的動力。是一種禍害譯本文淺談了在中關(guān)于的不好之處。淺談超時一運維的排查方式。 正在失業(yè)中的《課多周刊》(第3期) 我們的微信公眾號:fed-talk,更多精彩內(nèi)容皆在微信公眾號,歡迎關(guān)注。 若有幫助,請把 課多周刊 推薦給你的朋友,你的支持是我們最大的...
摘要:參考資料下文是關(guān)于的方法的第一個參數(shù)的學習。因此,會展開為和。獲取目錄下所有文件名長度為字符的文件。匹配該路徑段中在指定范圍內(nèi)的一個字符。匹配完全且精確地匹配,且不可組合不符合任何模型之一的字符??赏ㄟ^在設置,讓將視為普通字符。 參考資料:https://github.com/isaacs/nod... 下文是關(guān)于 Gulp 的 gulp.src(globs[, options]) 方...
摘要:如果不熟悉這種語言,有一篇關(guān)于阻塞與非阻塞的完整文章。在設計上與的或的等系統(tǒng)類似,并受其影響,進一步采用事件模型。它將事件循環(huán)呈現(xiàn)為運行時構(gòu)造而不是庫,在其他系統(tǒng)中,始終存在阻塞調(diào)用以啟動事件循環(huán)。上一篇指南目錄下一篇入門指南 關(guān)于Node.js 作為異步事件驅(qū)動的JavaScript運行時,Node旨在構(gòu)建可伸縮的網(wǎng)絡應用程序,在下面的hello world示例中,可以同時處理許多連...
閱讀 2809·2023-04-25 22:15
閱讀 1843·2021-11-19 09:40
閱讀 2183·2021-09-30 09:48
閱讀 3255·2021-09-03 10:36
閱讀 2061·2021-08-30 09:48
閱讀 1906·2021-08-24 10:00
閱讀 2756·2019-08-30 15:54
閱讀 739·2019-08-30 15:54