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

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

為什么不使用等式檢查數組

為什么不使用等式檢查數組

catspeake 2019-09-03 16:07:39
我開始時:"1:2".split(':') == ["1","2"]; // false然后嘗試:[1,2] == [1,2];// false最終:[] == []; // false我發現了:"1:2".split(':').toString() == [1,2].toString();// true所以我已經解決了我的初始問題(種類),但為什么數組不能相互匹配?
查看完整描述

3 回答

?
犯罪嫌疑人X

TA貢獻2080條經驗 獲得超4個贊


Javascript數組是對象,您不能簡單地使用相等運算符==來理解這些對象的內容是否相同。等于運算符將僅測試兩個對象實際上是否完全相同(例如myObjVariable==myObjVariable,適用于null且undefined也是如此)。


如果你需要檢查兩個數組是否相等,我建議只遍歷兩個數組并驗證所有元素是否具有相同的值(并且兩個數組的長度相同)。


關于自定義對象的相等性,我會構建一個特定的equals函數,然后將它添加到類的原型中。


考慮到最終你將兩個數組轉換為String測試結果字符串的相等性,有一天你可以考慮使用一個類似但更通用的技術,你會發現它在很多地方描述:


JSON.stringify(OBJ1) === JSON.stringify(OBJ2) 

好吧,不要。


雖然如果屬性的順序對于那些對象實例總是相同的,這可能會起作用,但是這樣就可以打開那些難以追蹤的非常討厭的錯誤。總是喜歡更明確的方法,只需編寫一個干凈且可讀的函數來測試相等性檢查所有必需的字段。


查看完整回答
反對 回復 2019-09-03
?
精慕HU

TA貢獻1845條經驗 獲得超8個贊

==用于在JavaScript對象操作者僅檢查是否該對象是相同的實際對象引用,而不是如果它們包含相同內容的兩個單獨的對象。沒有內置運算符來檢查它們是否包含相同的內容。您必須自己編寫一個函數來進行這種比較。

只要數組元素只包含原始值(而不是其他對象),您的字符串轉換就是比較兩個數組的一種方法。如果數組元素可以包含其他元素,那么您必須確保這些對象本身也轉換為代表性字符串。

并且,轉換為字符串不會在包含的數組元素與包含的數組元素之間分辨"4"4因為兩者都轉換為"4"字符串表示形式。


查看完整回答
反對 回復 2019-09-03
  • 3 回答
  • 0 關注
  • 331 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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