1 回答

TA貢獻1831條經(jīng)驗 獲得超10個贊
1. 字符串與數(shù)字之間的相等比較,此時 字符串會被強制轉(zhuǎn)換為數(shù)字
2. 其他類型和布爾值類型之間的相等比較, 布爾值會被強制轉(zhuǎn)換為數(shù)字, true轉(zhuǎn)為1,false 轉(zhuǎn)為0
3. null 和undefined之間的相等比較, null == undefined 返回true
4. 對象和非對象之間的相等比較, 對象需要進行ToPrimitive抽象操作(如toString(), valueOf())
根據(jù)上面的四條規(guī)律,來理解下面幾題:
[] == ![] 相當(dāng)于 [] == false 相當(dāng)于 '' == false 相等于 '' == 0 相當(dāng)于 0 == 0 因此結(jié)果為true
'1' == true 相當(dāng)于 '1' == 1 相當(dāng)于 1==1 因此結(jié)果為true
'2' == true 相當(dāng)于 '2' == 1 相當(dāng)于 2 ==1 因此結(jié)果為false
'3' == true 相當(dāng)于 '3' == 1 相當(dāng)于 3 ==1 因此結(jié)果為false
根據(jù)規(guī)范 a<=b 會被當(dāng)做 b < a,然后將結(jié)果反轉(zhuǎn),因此
null >= 0 可以理解為 !(null < 0)。 因為 null < 0 為false, 所以 null >=0 結(jié)果為true
使用+操作符時,如果其中一個操作符是對象,那么會先調(diào)用valueOf()方法,如果該方法返回基本類型值,就不再調(diào)用toString()方法。否則就調(diào)用toString()方法(有個例外,Date 的實例對象總是先調(diào)用toString,再調(diào)用valueOf)。
數(shù)組的valueOf()得不到基本類型值,所以數(shù)組會調(diào)用toString()方法。
{} + 1 的前面的{}是個空的代碼塊, 如果加上換車鍵 或許更好理解了。{} 回車 +1。 +1結(jié)果返回1了。
{var a = 10} + 1 道理跟上面一下,前面的{}是個代碼塊,只是后面沒加回車鍵。+1結(jié)果返回1.
{} + {} 是兩個空對象相加, 分為轉(zhuǎn)為字符串({}).toString(),再相加。結(jié)果為"object Object"
+[] 相當(dāng)于 Number([]), 結(jié)果為0
{} + [] 這里{}依舊是空代碼塊,因此返回+[]的結(jié)果,也就是0
[1,2]+ [3,4] [1,2]轉(zhuǎn)為字符串'1,2' [3,4]轉(zhuǎn)為字符串'3,4' , 因此結(jié)果為 "1,23,4"
+[2] 相當(dāng)于 +'2' 相當(dāng)于 Number('2')因此,結(jié)果為2
[2]+1 相當(dāng)于 '2' +1 因此,結(jié)果為'21'
[2] + (-1) 相當(dāng)于 '2'+(-1) 因此結(jié)果為'2-1'
- 1 回答
- 0 關(guān)注
- 546 瀏覽
添加回答
舉報