对于 javascript 的数组,为什么 [1] ==[1] return 为假?

for javascript's array why [1] ==[1] return false?

javascript中,对于数组,为什么:

console.log([1] == [1])

return假的?

里面有自动改型吗?还有 [1] === [1] return false 呢?

因为两个单独的对象永远不会==(或===)彼此,即使它们等价(与相同的值)。数组是对象。

要比较数组,请参阅 this question's answers

因为您正在比较两个 Array objects

如果你想比较数组的值,你可以这样做:

console.log([1] == [1]);

console.log(compareTwoArray([1], [1]));

console.log(compareTwoArray([1], [2]));

function compareTwoArray(arr1, arr2) {
  return arr1.length === arr2.length && arr1.every(x => arr2.includes(x));
}


你有车的图片,你的邻居有完全相同的车型。

如果要严格比较车,能不能只看车型?不,您必须查看汽车的每个部分(引擎、车轮...)才能说它们是 "the same"。

它们不是一个实体,这是两辆分开的车,但对你来说,它们的特性使它们完全相同。

所以[1]是一个数组,而[1]等数组。但是如果你看他们的价值观,你会说他们是相同的。

在Javascript中,数组是对象

typeof [1] // object

这意味着当您编写 [1] 时,您正在创建一个新对象。由于对象不是同一个对象,您无法使用 =====.

来测试它们是否相等

有关检查数组相等性的一些方法,请参阅 https://gomakethings.com/checking-if-two-arrays-are-equal/

无论您使用 == 还是 ===

,比较两个对象,即使它们彼此相同,也会 return 错误

比较两个对象使用JSON.stringify(object)

conole.log(JSON.stringify([1])==JSON.stringify([1]))

这将 return true

如果您想要进行多重比较,您可以将 JSON.stringify 设置为一个变量:

let i = JSON.stringify

那么你喜欢这个:

let i = JSON.stringify 
conole.log(i([1]) == i([1]))
conole.log(i([1]) === i([1]))

对象(Array are object)不一样,你实际上是从内存中比较它们的地址,因为它们是不同的实例,所以它们不相等。

顺便说一句,关于基元,你比较实际值(不是地址)