js物件比較
今天意外地發現JavaScript是不能用==或===操作符直接比較兩個陣列是否相等的。
1 2 |
|
以上兩句程式碼都會彈出false。
因為JavaScript裡面Array是物件,==或===操作符只能比較兩個物件是否是同一個例項,也就是是否是同一個物件引用。目前JavaScript沒有內建的操作符判斷物件的內容是否相同。
但是慣性思維讓人以為陣列也是值,是可以比較的。
如果要比較陣列是否相等,就只能遍歷陣列元素比較。
在網上流傳很普遍的一種做法是將陣列轉換成字串:
1 |
|
或
1 |
|
請不要使用這種方法。
這種方法在某些情況下是可行的,當兩個陣列的元素順序相同且元素都可以轉換成字串的情況下確實可行,但是這樣的程式碼存有隱患,比如數字被轉換成字串,數字“1”和字串“1”會被認為相等,可能造成除錯困難,不推薦使用。
在StackOverflow上有大神已經提供了正確的方法,我就做下搬運工吧:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
);
|
大神還順手給了比較Object的方法:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 |
|