JS中 [] == ![]結果為true,而 {} == !{}卻為false


 

 

 為什么?

先轉換再比較      (==)

僅比較而不轉換  (===)

 

==轉換規則?  

    ==比較運算符會先轉換操作數(強制轉換),然后再進行比較

①如果有一個操作數是布爾值,則在比較相等性之前先將其轉換為數值——false轉換為0,而true轉換為1;

②如果一個操作數是字符串,另一個操作數是數值,在比較相等性之前先將字符串轉換為數值;

在雙等號 左右兩邊類型相等時 采用三等號也就是嚴格運算符的判定規則

 

[ ] == ![ ] 解題思路? ![] 會變成 false,false會變成0;也就是==右側 是 0==在進行比較前,如果有一側是數字,會將另一側也轉化為數字類型,才會進行比較。 Number([]) // 0; 先在等號左側也是0 兩側都是0 所以是true。 [] == ![] -> [] == false -> [] == 0; ==右側的轉換 因為右側是數字,所以左側也要轉換為數字類型,才會進行比較 Number([]) == 0 -> 0 == 0 //true

 

 [] == [] // false  在雙等號 左右兩邊類型相等時 采用三等號也就是嚴格運算符的判定規則 對於對象(數組也是對象)只看雙方地址,地址一樣則返回true,所以[]===[]地址不一樣,返回fasle。

  {}=={} // false  
   同理,等號兩側類型相同,采用三等號判定,比的是地址,所以是false

 

 

{} == !{} // false {} == !{} --> {} == false --> {} == 0; 等號右側側的轉化 因為雙等號比較前,會先轉化為相同的類型,所以左側也要轉為數字類型 Number( {} ) == 0 --> NaN == 0 //false NaN和任何數字比都是false,所以{} == !{} // false

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM