不寻常的if / else行为

时间:2017-06-16 20:26:12

标签: javascript arrays if-statement comparison

我有两个嵌套数组的数组。

var array = [ [a,b,c], [a,b,c] ]

尽管数组元素相同,但以下代码返回 true

if (array[0] !== array[1]) {
  console.log(array[0])
  console.log(array[1])
}

// [a,b,c]
// [a,b,c]

以下代码返回 false

if (array[0] === array[1]) {
  console.log(array[0])
  console.log(array[1])
}

似乎是在比较指数而不是元素。

这里发生了什么?

有时我会将3个或甚至4个嵌套数组相互比较。例如,if ( array[0] === array[1] || array[0] === array[2] || array[1] === array[2] ) // do this。值得注意的是,ac始终是对实际HTML元素的引用,而b将是一个数字。现在有没有一种简单的方法来实现这一目标?

1 个答案:

答案 0 :(得分:1)

您正在比较对象引用,而不是对象值。指向内存的指针是不同的,因此比较是错误的。

这是一个在数组中使用html元素的简单示例。

<input id="lease_calculator_term_48" data-calculator-input="term" class="update_calculator" type="radio" value="48" name="lease_calculator[term]">
<input id="lease_calculator_term_60" data-calculator-input="term" class="update_calculator" disabled="disabled" type="radio" value="60" checked="checked" name="lease_calculator[term]">
var a1 = document.querySelectorAll('div');
var a2 = document.querySelectorAll('div');
var a3 = document.querySelectorAll('div');
var array = [Array.from(a1),Array.from(a2),Array.from(a3)];

console.log(array[0].every((v,i) => array.slice(1).every(ai => v == ai[i])));