在 javascript 中,对于数组,为什么:
console.log([1] == [1])
返回false?
是否有任何自动类型更改? [1] === [1]
也会返回false?
答案 0 :(得分:2)
因为两个单独的对象永远不会==
(或===
),即使它们等效(具有相同属性的相同属性)。数组是对象。
要比较数组,请参阅this question's answers。
答案 1 :(得分:0)
因为您正在比较两个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));
}
想象一下你有车,而你的邻居有完全相同的车型。
如果你想严格比较汽车,你能看看模特吗?不,你必须看看汽车的每个部分(发动机,车轮......)才能说它们“相同”。
它们不是一个实体,这是两辆分开的车,但对你来说,他们的特点使它们完全相同。
所以[1]
是一个数组,[1]
和其他数组。但是如果你看看他们的价值观,你会说它们是相同的。
答案 2 :(得分:0)
在Javascript中,数组是对象
typeof [1] // object
这意味着当您编写[1]
时,您正在创建一个新对象。由于对象不是同一个对象,因此无法使用==
或===
测试它们的相等性。
有关检查数组相等性的一些方法,请参阅https://gomakethings.com/checking-if-two-arrays-are-equal/。
答案 3 :(得分:0)
无论您使用==
还是===
要比较两个对象,请使用JSON.stringify(object)
conole.log(JSON.stringify([1])==JSON.stringify([1]))

这将返回true
如果您想进行多次比较,可以将JSON.stringify
设置为变量:
let i = JSON.stringify
然后你喜欢这个:
let i = JSON.stringify
conole.log(i([1]) == i([1]))
conole.log(i([1]) === i([1]))

答案 4 :(得分:0)
对象(数组是对象)不一样,你实际上比较了它们在内存中的地址,因为它们是不同的实例,它们是不相等的。
btw,关于基元,你比较实际值(不是地址)