对于javascript' s数组为什么[1] == [1]返回false?

时间:2018-05-16 12:55:25

标签: javascript conditional

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

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

返回false?

是否有任何自动类型更改? [1] === [1]也会返回false?

5 个答案:

答案 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));
}

想象一下你有车,而你的邻居有完全相同的车型。

enter image description here

如果你想严格比较汽车,你能看看模特吗?不,你必须看看汽车的每个部分(发动机,车轮......)才能说它们“相同”。

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

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

答案 2 :(得分:0)

在Javascript中,数组是对象

typeof [1] // object

这意味着当您编写[1]时,您正在创建一个新对象。由于对象不是同一个对象,因此无法使用=====测试它们的相等性。

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

答案 3 :(得分:0)

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

,比较两个对象即使它们彼此相同也会返回false

要比较两个对象,请使用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,关于基元,你比较实际值(不是地址)