本声明:
[].slice.call(document.getElementsByTagName("div")).forEach(function (item,index){console.log (item===[].slice.call(document.querySelectorAll("div"))[index])});
给出了所有真实的结果。 但是:
[].slice.call(document.getElementsByTagName("div"))===[].slice.call(document.querySelectorAll("div"));
给出错误的结果。 为什么呢?
答案 0 :(得分:1)
在第二种情况下,您尝试比较两个阵列,在第一种情况下,您要比较各个元素。这就是结果不同的原因。
比较数组的各个元素并比较两个数组是不相等的。例如,这个javascript函数检查数组相等性
function arraysEqual(a, b) {
if (a === b) return true;
if (a == null || b == null) return false;
if (a.length != b.length) return false;
// If you don't care about the order of the elements inside
// the array, you should sort both arrays here.
for (var i = 0; i < a.length; ++i) {
if (a[i] !== b[i]) return false;
}
return true;
}
现在使用
调用此函数arraysEqual([].slice.call(document.getElementsByTagName("div")), [].slice.call(document.querySelectorAll("div")))
结果是真的。
答案 1 :(得分:1)
我能说的最简单的方法是:
var a = [];
var b = [];
a === b // false
数组是javascript中的对象。如果实例化两个数组,则它们彼此不是===
。但是,如果逐个元素并且具有相同的元素,那么它们是相同的,因为您正在比较同一个对象。