在 JavaScript 中:
(1 == 1) === true;
(1 === 1) === true;
和
var a = 1;
var b = [1];
(a == b) === true
但
([1]==[1]) === false;
为什么会这样?我不知道
在 JavaScript 中:
(1 == 1) === true;
(1 === 1) === true;
和
var a = 1;
var b = [1];
(a == b) === true
但
([1]==[1]) === false;
为什么会这样?我不知道
[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 在这里适用。
因为[1]
和[1]
是 Array 对象的两个实例。因此,它们不相等(两个对象仅当它们是完全相同的实例时才相等)。
但是,当您比较1
和时[1]
,需要涉及类型杂耍。
通过用逗号连接所有项目,可以将数组转换为字符串。这导致字符串"1"
。
反过来,"1"
可以转换为一个数字,给出1
. 1 == 1
显然是真的。
因为数组是对象,它们通过引用而不是值进行比较,所以只有相同的实例是相等的
例如:
var array1 = [1];
var array2 = array1;
(array1 == array2) === true;
(array1 == [1]) === false
语法是 Array 对象的[]
文字构造函数,并且对象不能与其他对象进行比较(它们可以,但结果为负)。
字符串和数字在 JavaScript 中是不可变的,因此当您执行"string" === "string"
or之类的操作时,您实际上是在将内存中某个块的内容与其自身进行比较1 === 1
,而每次使用构造函数时都在构造一个新的 Array 对象。
我希望这是有道理的。