0

次のコードを作成しました http://jsfiddle.net/EbCUx/

var arr = [{a:1,b:2,c:3},{a:3,b:5,c:6}];
var a = arr[0];
alert(arr.indexOf(a));
var b = {a:1,b:2,c:3};
alert(arr.indexOf(b));

なぜ indexOf() は -1 を返すのですか?

4

3 に答える 3

4

内部の値がたまたま同じである 2 つの異なるオブジェクトを比較していますが、同等性の観点から見ると、それらは依然として異なるオブジェクトです。

元のコード:

<script>
    var arr = [{a:1,b:2,c:3},{a:3,b:5,c:6}];
    var a = arr[0];
    alert(arr.indexOf(a));
    var b = {a:1,b:2,c:3};
    alert(arr.indexOf(b));
</script>

比較で一致を取得する方法を示す更新バージョン。

<script>
    var b = {a:1,b:2,c:3};
    var arr = [b,{a:3,b:5,c:6}];
    var a = arr[0];
    alert(arr.indexOf(a));
    alert(arr.indexOf(b));
</script>

たまたま同じ値を持つ 2 つの異なるオブジェクトを比較したい場合は、手動で行う必要があります。

于 2012-05-03T19:51:12.633 に答える
3

MDNから:

indexOf は、厳密な等価性を使用して searchElement を Array の要素と比較します (=== またはトリプルイコール演算子で使用されるのと同じ方法)。

2 つのオブジェクトが厳密に等しいことはないため、indexOf を使用してオブジェクトの配列を検索することはできません。ループする必要があります (配列の要素がオブジェクトの場合は、indexOf を拡張してループします)。

于 2012-05-03T19:54:46.270 に答える