莫回無
2023-08-10 16:03:27
在數(shù)學中,= 被假定為傳遞關系。傳遞性的意思正是你所說的:A = B和B = C意味著A = C。但是,據(jù)我所知,javascript不尊重這種傳遞性原則。對于以下所有表達式,輸出均為 TRUE[]==0true0==[]true"0" == 0true0 == "0"true但是,這是錯誤的"0" == []false它背后的原因是什么?編譯器如何處理這個表達式?
3 回答

慕桂英3389331
TA貢獻2036條經(jīng)驗 獲得超8個贊
右側值被強制轉換為字符串。
console.log("0" == []) // false
console.log([].toString()) // ""
console.log("" == [].toString()) // true
console.log("0" == [0].toString()) // true
console.log([0, 1, 2, 3].toString()) // 0,1,2,3
console.log("0,1,2,3" == [0, 1, 2, 3]) // true

心有法竹
TA貢獻1866條經(jīng)驗 獲得超5個贊
JavaScript 的激進類型的強制轉換會導致奇怪的結果??諗?shù)組的字符串等價物是空字符串,因此這就是它的工作原理。同樣,將空字符串轉換為數(shù)字會得到零,因此您也可以將數(shù)組轉換為數(shù)字。字符串“0”等于 0,因為調用 0.toString 給出“0”。但我們之前說過,空數(shù)組會變成空字符串,因此我們不能將“0”作為空數(shù)組的轉換版本。
所有這一切的發(fā)生首先是由于“==”,它強制類型。對于“===”,這些等式都不成立。
添加回答
舉報
0/150
提交
取消