5

2 つの jQuery 配列initialListnewList.

私は最初にそれらを次のように比較します:

initialList == newList

これは を返しますfalse

次に、要素ごとに比較します。

$.each(initialList, function(idx, element){ console.log(element == newList[idx] )});

すべての比較はtrue.

では、すべての要素が同一である場合、なぜ最初の比較で false を返すのでしょうか?

4

2 に答える 2

5

それらが同等かどうか(すべてのアイテムが同じかどうか) を尋ねているのに対し、オペレーターはそれらが同じもの(同じオブジェクトへの参照)==かどうかをチェックしています。そうではないので、false を返します。==

がオペランドを評価せず、すべての意図と目的で「同じ」かどうかを哲学的に尋ねている場合は、ウィキペディアで同等性と同等性について詳しく読むことができます(オブジェクトの同一性と内容の同等性)。==

于 2012-10-16T09:04:31.217 に答える
2

このデモを参照してください: http://jsfiddle.net/pEzAW/

演算子を使用する==と、あるオブジェクトをその状態ではなく別のオブジェクトと比較しようとしますが、ループ バージョンでは要素を比較しています。

次のような簡単なバージョンを実行できます: 長さを確認するには、これも参照してください: http://jsfiddle.net/ASnYu/1/

arr1 = [1,2,3]
arr2 = [1,2,3]

alert(arr1 == arr2)


if ($(arr1).not(arr2).length == 0 && $(arr2).not(arr1).length == 0 && arr1.length == arr2.length)
    alert("Two arrays are Identical");​

IDにとって順序が重要な場合は、 https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Object/ValueOfを使用してこれを行います

http://jsfiddle.net/Putjc/

コード

arr1 = [1, 2, 3]
arr2 = [2, 1, 3]

if ($(arr1).not(arr2).length == 0 && $(arr2).not(arr1).length == 0 && arr1.length == arr2.length && arr1.valueOf().toString() == arr2.valueOf().toString()) 
         alert("Two arrays are Identical"); 
else alert("two arrays are **not** identical");​

ランダムな興味深い読み物: jQuery は配列ですか?

それが原因に適合することを願っています!

于 2012-10-16T09:10:16.983 に答える