javaScript中==和===對數組、對象的判斷是它們是否同一個實例對象


 

問題描述

在實現業務時,大量用到了 if(a === b)這樣的判斷,但有一個類似判斷一直進不去這個if條件, a === b 返回的一直是false,但是其他幾個類似判斷,都正常觸發條件。

原因分析

我們都知道 === 是嚴格相等,首先要兩個值的類型相等,無法觸發條件的這個判斷,a和b都是Array對象,且通過打印,看到數組中的元素是一樣的。於是寫了幾個測試判斷,如下:

image.png

通過上圖可以看到,對於javascript的基礎類型Number、String,如c2和d2都等於1,用c2===d2的結果就是true,但是對於高級類型Object和Array,即便它們的值相等,===返回的也是false,甚至於==也是false。

這實際上是javascript的語言特性:

javascript中Array也是對象,而==或===操作符只能比較兩個對象是否是同一個實例,也就是是否是同一個對象引用。圖中兩個數組顯然不是同一個對象實例,由於思維慣性,導致寫代碼的時候對不同數組也用了類似判斷,導致無法成功觸發條件。

 

解決方案

目前JavaScript沒有內置的操作符判斷對象的內容是否相同。

可以使用lodash的isEqual方法,如下圖:

image.png

 

 


免責聲明!

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



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