あじちゃんのブログ。備忘録。

〜SEもOLなんですかね?

【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