与==的jQuery数组比较?

时间:2012-10-16 08:59:46

标签: jquery arrays

我有两个jQuery数组initialListnewList

我首先比较它们:

initialList == newList

返回false

然后我逐个元素地比较:

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

每次比较都是true

因此,如果所有元素都相同,为什么在第一次比较中返回false?

2 个答案:

答案 0 :(得分:5)

你问他们是否等效(所有项目都相同),而==运算符正在检查他们是否相同的事情(引用同一个对象)。它们不是,所以==返回false。

如果您要求哲学为什么==不评估操作数并告诉您是否所有意图和目的都是'相同',您可以阅读更多关于等价经文等式on Wikipedia(对象身份与内容相等)。

答案 1 :(得分: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");​

如果订单对于身份非常重要使用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");​

随机有趣的阅读:Is jQuery an Array?

希望它符合原因!