3

在 JavaScript 中:

(1 == 1) === true;
(1 === 1) === true;

var a = 1;
var b = [1];
(a == b) === true

([1]==[1]) === false;

为什么会这样?我不知道

4

5 回答 5

13

[1]另一个[1]是不同的对象,对象相等被定义为身份。换句话说,一个对象只等于它自己。

> a = [1]
[1]
> b = [1]
[1]
> a == b
false
> b = a
[1]
> a == b
true

参考:http://es5.github.io/#x11.9.3,步骤 1.f 在这里适用。

于 2013-11-05T13:32:48.773 回答
6

因为[1][1]是 A​​rray 对象的两个实例。因此,它们不相等(两个对象仅当它们是完全相同的实例时才相等)。

但是,当您比较1和时[1],需要涉及类型杂耍。

通过用逗号连接所有项目,可以将数组转换为字符串。这导致字符串"1"

反过来,"1"可以转换为一个数字,给出1. 1 == 1显然是真的。

于 2013-11-05T13:34:14.260 回答
0

因为数组是对象,它们通过引用而不是值进行比较,所以只有相同的实例是相等的

例如:

var array1 = [1];
var array2 = array1;
(array1 == array2) === true;
(array1 == [1]) === false
于 2013-11-05T13:34:24.927 回答
0

请看这里:如何在 JavaScript 中比较数组?

语法是 Array 对象的[]文字构造函数,并且对象不能与其他对象进行比较(它们可以,但结果为负)。

于 2013-11-05T13:34:59.697 回答
0

字符串和数字在 JavaScript 中是不可变的,因此当您执行"string" === "string"or之类的操作时,您实际上是在将内存中某个块的内容与其自身进行比较1 === 1,而每次使用构造函数时都在构造一个新的 Array 对象。

我希望这是有道理的。

于 2013-11-05T13:42:19.253 回答