Javascript 为什么下面的比较输出为false?

Javascript 为什么下面的比较输出为false?,javascript,operators,Javascript,Operators,假设未覆盖数组,为什么以下比较输出为false [] === new Array() > false [] === [] > false 您正在比较两个唯一数组对象的标识,而不是内容。您正在比较两个唯一数组对象的标识,而不是内容。这些对象不同,因为它们是不同的内存段。例如: var a = [], b = []; a === b; // false typeof a === typeof b; // true 注意:语句类型将返回。有更好的方法来确定对象是否是数组。但

假设未覆盖
数组
,为什么以下比较输出为false

[] === new Array()
> false

[] === []
> false

您正在比较两个唯一数组对象的标识,而不是内容。

您正在比较两个唯一数组对象的标识,而不是内容。

这些对象不同,因为它们是不同的内存段。例如:

var a = [],
    b = [];

a === b; // false
typeof a === typeof b; // true

注意:语句类型将返回。有更好的方法来确定对象是否是数组。但是这就足够解释了。

对象是不同的,因为它们是不同的内存段。例如:

var a = [],
    b = [];

a === b; // false
typeof a === typeof b; // true

注意:语句类型将返回。有更好的方法来确定对象是否是数组。但这就足够解释了。

无论是使用相等
==
运算符还是严格相等
===
运算符,如果操作数是对象,则只有当两个操作数引用同一对象时,结果才会为真

您的代码创建了两个不同的数组,都是空的,因此直观上它们可能看起来相等,但equals运算符不是这样工作的

类似地,类似于
[1,2,3]==[1,2,3]
的内容将为false。同样,很容易认为它们应该相等,但比较是测试数组是否相同,而不是测试数组中的所有元素是否相等

另一方面,如果
x
y
都引用相同的数组,则
x===y
将为真


有关详细信息:

无论是使用相等
==
运算符还是严格相等
===
运算符,如果操作数是对象,则仅当两个操作数引用同一对象时,结果才会为真

您的代码创建了两个不同的数组,都是空的,因此直观上它们可能看起来相等,但equals运算符不是这样工作的

类似地,类似于
[1,2,3]==[1,2,3]
的内容将为false。同样,很容易认为它们应该相等,但比较是测试数组是否相同,而不是测试数组中的所有元素是否相等

另一方面,如果
x
y
都引用相同的数组,则
x===y
将为真


有关更多信息:

操作员使用,在步骤7中说明:

如果x和y引用同一对象,则返回true。否则,返回false


因此,如果a和b引用一个对象,那么只有当a和b引用同一个对象(注意数组是对象)时,
a===b

操作员使用,在第7步:

如果x和y引用同一对象,则返回true。否则,返回false


因此,如果a和b引用一个对象,那么只有当a和b引用同一个对象(注意数组是对象)时,
a===b

在JavaScript中,当您在对象上使用
=
=
时(数组只是一个对象,
[]
只是语法糖),仅当两个操作数引用完全相同的对象时才返回
true
,但如果它们引用两个不同甚至相同的对象时则不返回

例如:

js> var x = []
js> var y = []
js> x == y
false
js> x = y
js> x == y
true

可以将其视为两个人谈论同一个人与两个人分别谈论两对双胞胎的区别。

在JavaScript中,当您在对象上使用
==
==
时(数组只是一个对象,
[]
只是语法糖),仅当两个操作数引用完全相同的对象时返回
true
,但如果它们引用两个不同甚至相同的对象则不返回

例如:

js> var x = []
js> var y = []
js> x == y
false
js> x = y
js> x == y
true
把它想象成两个人谈论同一个人与两个人分别谈论两对双胞胎的区别