为什么他们不一样?

时间:2016-06-17 03:37:06

标签: javascript dom

本声明:

[].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"));

给出错误的结果。 为什么呢?

2 个答案:

答案 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中的对象。如果实例化两个数组,则它们彼此不是===。但是,如果逐个元素并且具有相同的元素,那么它们是相同的,因为您正在比较同一个对象。