jQuery数组如何使用==进行比较?

5
我有两个jQuery数组initialListnewList
我首先按照以下方式进行比较:
initialList == newList

这将返回false
然后我逐个比较元素:
$.each(initialList, function(idx, element){ console.log(element == newList[idx] )});

每次比较结果都是true

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


1
当你比较这两个数组时,你是在比较代表数组的对象,而不是它们的内容。 - Mifeng
2个回答

5
你在问它们是否“相等”(所有项目都相同),而“==”运算符检查它们是否“相同”(引用相同的对象)。它们不是,因此“==”返回false。
如果你在哲学上询问为什么“==”不评估操作数并告诉你它们在所有意义上是否“相同”,你可以阅读更多关于等价性与相等性的内容在维基百科上(对象身份与内容相等)。

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是一个数组吗?

希望它符合您的要求!


1
[1,2,3][1,1,2,3],它们相同吗? - xdazz
@xdazz 谢谢兄弟 :) 已修复 http://jsfiddle.net/ASnYu/1/ 并且可以工作 http://jsfiddle.net/ASnYu - Tats_innit
1
[1,2,3][2,1,3],它们相同吗? - David Hedlund
@DavidHedlund +d,感谢您的评论,兄弟:)我认为顺序不同但两者都包含相同的元素,我会看看如何挤入顺序检查:) - Tats_innit
@DavidHedlund,感谢您的帮助,订单已经进行了增强固定处理 :) http://jsfiddle.net/Putjc/。非常感谢! - Tats_innit

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接