我有两个 jQuery 数组initialList
和newList
.
我首先像这样比较它们:
initialList == newList
这返回false
。
然后我逐个元素比较:
$.each(initialList, function(idx, element){ console.log(element == newList[idx] )});
每个比较都是true
。
那么,如果所有元素都相同,为什么在第一次比较中返回 false 呢?
您是在询问它们是否相等(所有项目都相同),而==
操作员正在检查它们是否是同一事物(对同一对象的引用)。他们不是,所以==
返回 false。
如果您从哲学上问为什么==
不评估操作数并告诉您它们是否出于所有意图和目的“相同”,您可以在 Wikipedia 上阅读更多关于等价与平等的信息(对象身份与内容平等)。
看这个演示: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
代码
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 是一个数组吗?
休息希望它适合事业!