我有两个jQuery数组initialList
和newList
。
我首先比较它们:
initialList == newList
返回false
。
然后我逐个元素地比较:
$.each(initialList, function(idx, element){ console.log(element == newList[idx] )});
每次比较都是true
。
因此,如果所有元素都相同,为什么在第一次比较中返回false?
答案 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执行此操作
<强>码强>
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?
希望它符合原因!