5

我有两个 jQuery 数组initialListnewList.

我首先像这样比较它们:

initialList == newList

这返回false

然后我逐个元素比较:

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

每个比较都是true

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

4

2 回答 2

5

您是在询问它们是否相等(所有项目都相同),而==操作员正在检查它们是否是同一事物(对同一对象的引用)。他们不是,所以==返回 false。

如果您从哲学上问为什么==不评估操作数并告诉您它们是否出于所有意图和目的“相同”,您可以在 Wikipedia 上阅读更多关于等价与平等的信息(对象身份与内容平等)。

于 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");​

如果顺序对身份很重要,请使用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 回答