談談JavaScript令人迷惑的==與+
前言
相信很多學習過JavaScript的小伙伴都對JavaScript的==與+有一些疑惑,經常會出現結果與自己想象不一樣的情況,而且也沒找到一個通用的方法,只能死記硬背,非常難受。(咦,這不就是說的我嘛,嘻嘻嘻)今天就一起來揭開它們的神秘面紗,徹底解決掉他們。
正式開始之前,先來小試牛刀一下:
null == undefined; [] == []; ’23’= 23; 45 == [45]; false == undefined; '' == [null]; {} + {}; false + 1
ToPrimitive函數
ToPrimitive是一個內部函數,用于處理類型轉換,從字面意思就知道這個函數的就是將變量轉化為基本類型的一個函數。
ToPrimitive(input, PreferredType)
第一個參數是 input,表示要轉化的值;
第二個參數是PreferredType,表示希望轉換成的類型,可為Number/String。
<p style='color:red'>當input是日期類型時,PreferredType為String,其余情況下都相當于傳入Number。</p>
當PreferredType傳入參數時處理步驟會有差異,處理步驟分別如下:
1.PreferredType傳入Number
(1). 如果input為基本類型,直接返回;
(2). 否則,調用valueOf方法,如果得到一個基本類值直接返回;
(3). 否則,調用toString方法,如果得到一個基本類值直接返回;
(4). 否則,JavaScript 拋出一個類型異常錯誤。
2.PreferredType傳入String
(1). 如果input為基本類型,直接返回;
(2). 否則,調用toString方法,如果得到一個基本類值直接返回;
(3). 否則,調用valueOf方法,如果得到一個基本類值直接返回;
(4). 否則,JavaScript 拋出一個類型異常錯誤。
==
上述介紹了ToPrimitive函數,那么對于==的結果就能有一個清晰的認知。
我先給出一個判斷邏輯,然后再以例子進行具體分析:
1.兩邊類型一致時,基本變量就直接進行值比較,相同則為true,不同則為false,引用變量如果兩邊都指向同一個內存地址那么返回true,否則返回false。
<p style='color:red'>特別情況:</p>
null == undefined //true 可以理解為兩值都為無效的值,所以內部認為并無不同,所以相等 NaN == NaN //false //如果兩個symbol變量不指向同一內存空間那么永為false,否則為true
2.兩邊類型不一致:
(1). 先調用ToPrimitive()返回基本類型;
(2). 若類型不一致,則調用ToNumber();( 這里的ToNumber也是一個內部函數,可將值轉化為數字型 )
舉兩個例子吧:
false == undefined //true //false調用ToPrimitive返回false //undefined調用ToPrimitive返回undefined //false調用ToNumber返回0 //undefined調用ToNumber返回0
45 == [45] //true //45調用ToPrimitive返回45 //[45]調用ToPrimitive返回'45' //45調用ToNumber返回45 //'45'調用ToNumber返回45
+
一元操作運算符+
+作為一元操作運算符邏輯比較簡單:先調用ToPrimitive,后調用ToNumber
+[’1’] //1 //[’1’]調用ToPrimitive返回'1' //'1'調用ToNumber返回1
+{} //NaN //{}調用ToPrimitive返回'[object Object]' //'[object Object]'調用ToNumber返回NaN
二元操作運算符+
+作為二元操作運算符邏輯如下:
兩個值分別調用ToPrimitive; 如果兩個的返回值中有一個為字符串類型,則返回兩個值toString的拼接結果; 否則返回toNumber相加的結果null + 1 //1 //null調用ToPrimitive返回null //1調用ToPrimitive返回1 //null調用ToNumber返回0 //1調用ToNumber返回1 //0 + 1 = 1
[1, 2] + [3, 4] //'1,23,4' //[1, 2]調用ToPrimitive返回'1,2' //[3, 4]調用ToPrimitive返回'3,4' //'1,2'調用toString返回'1,2' //'3,4'調用toString返回'3,4' //'1,2' + '3,4' = '1,23,4'
以上就是談談JavaScript令人迷惑的==與+的詳細內容,更多關于JavaScript ==和+的資料請關注好吧啦網其它相關文章!
相關文章: