今天在聼《陪你读书(JavaScript WEB前端培训教程)》時,提到了一個帖子:javascript: [] == ![]答案为什么会是true?(https://www.zhihu.com/question/29615998)
試著解釋一下:
首先看代碼:
[] == ![]
-
根據javascript的運算符優先級,邏輯非比相等操作符優先,所以右邊“![]”先算。因爲[]是數組對象,對象的布爾值都爲true,所以[]是true,而這裏有個邏輯非,所以“![]”是false;
[] == false -
相等操作符會將等號兩邊先進行轉換,而現在右邊為布爾值,所以會將“false”轉換為數值“0”;注解(1)
[] == toNumber(false)
[] == 0 -
這時左邊是一個數組對象,所以將其轉換成原始數據類型,調用toString方法得到一個空字符串;注解(2)
toString([]) == 0
"" == 0
4.這時左邊已經變成一個字符串,所以要將字符串轉換為數值,空字符串轉換為數字是“0”;注解(3)
toNumber("") == 0
0 == 0
4.所以結果為true.
注解:
引用《JavaScript高級程序設計》(第3版)
(1)3.5 操作符 p51 最底下相等與不相等操作符遵循下列基本規則第1條;
(2)3.5 操作符 p52 最底下相等與不相等操作符遵循下列基本規則第3條;
(3)3.5 操作符 p52 最底下相等與不相等操作符遵循下列基本規則第2條;
网友评论