在 JavaScript 中,几乎所有东西都是对象。有一些原始类型可以根据需要在原始版本和对象版本之间自动装箱。
当您在 JavaScript 中比较对象时,您实际上是在比较它们是否是相同的引用(例如,指向相同的内存地址)。证明在这里
var a = [1, 2, 3];
b = a;
b.push(5);
console.log(a); // 1, 2, 3, 5
在这种情况下a == b
ora === b
将屈服true
。如果我想比较两个单独的数组,那么我需要遍历它们并逐个元素地比较。
在以下情况下,我可以使用一个技巧。现场演示
var x = [1, 2, 3];
var y = [1, 2, 4];
var z = [1, 2, 3];
var equals = x.join("").localeCompare(y.join("")) == 0; //x with y
var equals2 = x.join("").localeCompare(z.join("")) == 0; //x with z
document.body.innerHTML += equals + "<br />";
document.body.innerHTML += equals2 + "<br />";
在你奇怪的情况下
Array([],null,undefined,null) == ",,,";
在 JavaScript 中,==
运算符将执行它可以执行的所有类型转换/转换以检查相等性。它将尝试将 aString
与进行比较String
,此时左侧的Array
将String
使用简单的toString()
调用转换为 a!
看这里,我想答案现在很明显了。