摘要:判斷相等的運算符分成相等運算符和全等運算符,似乎和并沒有統一的翻譯,且把它們分成相等和全等好了。相等運算符判斷是否相等的規則如果操作數類型一致,且滿足全等的條件,則相等,否則不相等。類型相同,但值不同,所以不全等。參考的等號運算符
JavaScript 判斷相等的運算符分成相等運算符(==)和全等運算符(===),似乎==和===并沒有統一的翻譯,且把它們分成"相等"和"全等"好了。
全等運算符判斷是否全等的規則:
如果操作數類型不同,那么不全等。
如果二者都是null, 全等。
如果都是undefined, 全等。
如果其中之一為NaN, 不全等。
如果二者都為true或false, 全等。
如果都為數值且值相等,全等。
如果都為字符串,且值相等,全等。
如果都指向同一個引用類型,全等。
其他情況,不全等。
舉例// false, 類型不同#1 1 === "1" // fasle, #4 NaN === NaN // false, 雖然都是空對象,但不是同一個引用類型值 [] === [] // true, 同一個引用類型值 var firstObject = {} var secondObject = firstObject secondObject["name"] = "Neo" secondObject === firstObject引用類型轉換成基本類型
在之前的加法運算符里面也提到過引用類型到基本類型的轉換,過程大致如下:
先調用valueOf方法,如果返回的是基本類型值,轉換結束。
如果失敗了,就調用toString方法。如果返回基本類型值,轉換結束。
否則,拋出錯誤:TypeError: Cannot convert object to primitive value
大多數的原生對象在調用valueOf方法的時候都會返回對象自身,所以大多數時候其實都會調用toString方法。
Date對象比較特殊,它的valueOf方法返回的是毫秒數,在轉換成基本類型值的時候直接調用toString方法。
相等運算符判斷是否相等的規則:
如果操作數類型一致,且滿足全等的條件,則相等,否則不相等。
如果操作數類型不一致:
如果一個是null, 另一個是undefined, 相等。
如果一個是數字,另一個是字符串,把字符串轉換成數字再比較。
如果一個是布爾值,把true轉成1, false轉成0, 然后再比較。
如果一個是對象,另一個是數字或者字符串,把對象轉成基本類型值再比較。
其他情況,不相等。
舉例1 == true // true
根據條件2.3,把true轉成1。
然后兩個操作數類型一致,滿足條件1,使用全等比較。
都為數值且相等,全等。
相等。
"" == 0 // true
根據2.2,把""轉換成數字,即0。
然后兩個操作數類型一致,滿足條件1,使用全等比較。
都為數值且相等,全等。
相等。
null == 0 // false
條件3,屬于其他情況,不相等。
null == undefined
條件2.1,相等。
NaN == NaN // false
類型一致,轉換成全等比較
NaN === NaN 不成立,因此不全等
所以不相等
[""] == "" // true
條件2.4,先把數組轉換成基本類型
比較"" == "",類型相同,轉成全等比較
類型相同,且值相同,全等。
相等。
{} == true // false
true轉換成1,然后對象轉換成基本類型值,即"[object Object]" == 1
條件2.2,把字符串轉換成數字,得到NaN == 1,類型相同,轉成全等比較。
類型相同,但值不同,所以不全等。
不相等。
初看上去,內容非常的繁雜,但是如果碰到的時候就來查一下,很快就能有肌肉記憶了。
參考:JavaScript 的等號運算符
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/79480.html
摘要:代碼示例等號檢查,類型轉換后返回全等檢查,由于時類型,時類型,類型不同,返回關系運算符關系運算符執行的是比較運算,通常用于判斷兩個變量哪個大哪個小關系運算符都返回一個布爾值。邏輯或運輸符用雙豎線表示。 1.運算符 JavaScript中常見的運算符包含:賦值運算符、算數運算符、等性運算符、關系運算符、條件運算符、布爾運算符、邏輯運算符…… 1.賦值運算符 = 賦值運算符=,用于給某個變...
摘要:數字,類型轉換成數字進行比較和不會相互轉換,相等有數字類型,和對象相比,對象用轉換成原始值進行比較其他情況,一律返回 ===運算符判斷相等的流程是怎樣的 類型不同,不等 null,undefined,boolean,number這四個類型的只要值(數值)相等,就相等,-0 === 0 //true 只要其中有一個為NAN,則不等 string類型,長度/內容/編碼不同,都是不等,相...
摘要:所以為為第二步轉成根據文檔比較操作符如果一個對象與數字或字符串相比較,會嘗試返回對象的默認值。嘗試將數字字面量轉換為數字類型的值。 [] == false; //為True !![] == false; //為False 一、[] == false為True 第一步 轉成[] == 0 根據 MDN Web 文檔-比較操作符:https://developer.mozilla.org...
摘要:所以為第四步轉成根據文檔比較操作符當比較數字和字符串時,字符串會轉換成數字值。嘗試將數字字面量轉換為數字類型的值。最后位所以為其他鏈接 [] == ![] //為True 第一步 轉成[] == false 根據 MDN Web 文檔-運算符優先級:[https://developer.mozilla.org...](https://developer.mozilla.org...s...
摘要:前言為是可以實現的。在中,非對象參數將被視為一個凍結的普通對象,因此會返回。注意所以一定要是對象,如果是非對象的其他基本類型如,,被視為凍結對象,不能重寫,則不起效果。第四步為這時已經為,運行返回值也為。最后為如上所示為,為,則為其他鏈接 前言 a==3 && a==4為True是可以實現的。具體代碼如下所示: let a=[]; var x=3; a.valueOf=()=>{ ...
閱讀 966·2023-04-26 02:49
閱讀 1177·2021-11-25 09:43
閱讀 2549·2021-11-18 10:02
閱讀 2923·2021-10-18 13:32
閱讀 1285·2019-08-30 13:54
閱讀 2081·2019-08-30 12:58
閱讀 3015·2019-08-29 14:06
閱讀 2155·2019-08-28 18:10