テクニカル雑記帳です
【JavaScript】配列の比較について
まとめ
JavaScriptで、配列の比較の際に==又は===演算子を用いると、その配列が参照しているメモリ上のアドレスが同じかどうかでtrue/falseを返す。Object.is()
も同様。
例
var list_1 = ["mike","saba","tora"];
var list_2 = ["mike","saba","tora"];
console.log(list_1 === list_2);
// -> false
console.log(Object.is(list_1, list_2));
// -> false
配列が全く同じであっても、比較の際に ==
===
Object.is()
を用いると false
が返る。
これは、比較対象が中の値ではなくポインタのアドレスを見ているため。
じゃあどうやって比較する?
一番楽なのは、toString()
してしまう。
もしくは(冗長になってしまうけど)配列を回して比較。
var list_1 = ["mike","saba","tora"];
var list_2 = ["mike","saba","tora"];
console.log(list_1.toString() === list_2.toString());
// -> true
console.log(Object.is(list_1.toString(), list_2.toString()));
// -> true
ただ、Object.is()
や ===
のようにオブジェクトを比較したいときはまたちょっと複雑そう・・・。いつか調べる。
追記
ツイッタで質問があったので。
JavaScriptの配列型にはequalsメソッドが存在しません。
[1, 2] == [1, 2];
// -> false
[1, 2].equals([1, 2]);
// -> Uncaught TypeError: [1,2].equals is not a function