美文网首页
爲什麽[]==![]是true?

爲什麽[]==![]是true?

作者: SA_Arthur | 来源:发表于2017-04-18 18:48 被阅读0次

    今天在聼《陪你读书(JavaScript WEB前端培训教程)》時,提到了一個帖子:javascript: [] == ![]答案为什么会是true?(https://www.zhihu.com/question/29615998)
    試著解釋一下:
    首先看代碼:
    [] == ![]

    1. 根據javascript的運算符優先級,邏輯非比相等操作符優先,所以右邊“![]”先算。因爲[]是數組對象,對象的布爾值都爲true,所以[]是true,而這裏有個邏輯非,所以“![]”是false;
      [] == false

    2. 相等操作符會將等號兩邊先進行轉換,而現在右邊為布爾值,所以會將“false”轉換為數值“0”;注解(1)
      [] == toNumber(false)
      [] == 0

    3. 這時左邊是一個數組對象,所以將其轉換成原始數據類型,調用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條;

    相关文章

      网友评论

          本文标题:爲什麽[]==![]是true?

          本文链接:https://www.haomeiwen.com/subject/otdqzttx.html