亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

JavaScript為什么console.log ([] == ![]) 結果為true?

JavaScript為什么console.log ([] == ![]) 結果為true?

料青山看我應如是 2018-09-03 17:09:46
javascript為什么console.log ([] == ![]) 結果為true?console.log([] == null);  //falseconsole.log(Boolean([])); //trueconsole.log(![]); // falseconsole.log(![] == ![]); //trueconsole.log([] == []); //false究竟這個比的機制是怎么樣的呢, 不應該是 ![]為false , 就變成了 [] == false,那么[]不應該隱式轉換為true嗎? 這樣不就變成了 true == false 結果應該為false???問題得到了本質上的解決,感謝一位朋友分享的知乎文章。原因是:作者:Belleve鏈接:https://www.zhihu.com/questio...來源:知乎著作權歸作者所有,轉載請聯系作者獲得授權。首先,== 的定義是:GetValue 會獲取一個子表達式的值(消除掉左值引用),在表達式 [] == ![] 中,[] 的結果就是一個空數組的引用,而 ![] 就有意思了,它會按照 11.4.9 和 9.2 節的要求得到 false。比較的行為在 11.9.3 節里,所以翻到 11.9.3:在這段算法里,和「[] == ![]」匹配的是條件 7,所以會遞歸地調用「[] == ToNumber(false)」進行比較。在 9.3 節中定義了 ToNumber 原語,ToNumber(false) 等于 0,于是比較變為「[] == 0」。在此處因為 [] 是對象,比較過程走分支 9,依「ToPrimitive([]) == 0」比較。ToPrimitive 默認是調用 toString 方法的(依 8.2.8),于是 ToPrimitice([]) 等于空字符串。結果,[] == ![] 的比較最后落到了 ''==false 上,按照 11.9.3 中的定義會依分支 5 比較 「ToNumber('')==0」,ToNumber('') 依 9.3.1 等于 0,所以結果為 true。
查看完整描述

目前暫無任何回答

  • 0 回答
  • 0 關注
  • 1889 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號