对于 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)不一样,你实际上是从内存中比较它们的地址,因为它们是不同的实例,所以它们不相等。
顺便说一句,关于基元,你比较实际值(不是地址)
在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/。
无论您使用 ==
还是 ===
比较两个对象使用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)不一样,你实际上是从内存中比较它们的地址,因为它们是不同的实例,所以它们不相等。
顺便说一句,关于基元,你比较实际值(不是地址)