2012-08-12 57 views
1

中是错误的我在看ES5的第11.9.6节,试图找出为什么[1, 2,3] === [1,2,3]返回false。寻找解释为什么`[1,2,3] === [1,2,3]`在JS

的代码:

a = [1,2,3] 
b = [1,2,3] 
a === b // false 

为严格相等比较算法中的相关规则:

X ===ý

(1)如式(x)是从不同类型(y),返回虚假

...

...

...

(7)如果x和y是指相同的对象,则返回true。否则返回虚假

任何想法为什么解释器返回false?

+3

'如果x和y引用同一个对象,则返回true'。你只是提出了两个对象并进行了比较,这不是预期的行为吗? – 2012-08-12 17:15:58

+0

我没有意识到他们是两个独立的对象。他们都没有引用数组对象吗? – 2012-08-12 17:16:50

+0

Array是一个类型而不是对象。 – 2012-08-12 17:18:15

回答

4

ab是两个不同的对象,它们只是碰巧在它们中具有相同的数值。如果您确实a[0] = 42;,那么b[0]仍然等于1.

+0

只是一个小小的修正。数组*不具有相同的元素。元素是属性,一个属性不能属于两个不同的对象。 (另外,术语“相同的元素”是无用的,因为属性是无法比较的 - 只有它们的值才可以)。一种更好的方式是说“它们恰好具有相同的* Number *值” 。 – 2012-08-12 18:32:24

+0

同意,这是更确切的。正是这种含糊不清的措辞首先导致了混淆。纠正。 – Bort 2012-08-12 18:34:48

0

它们不引用同一个对象。就那么简单。

0

看起来您的ab指的是不同的对象。它们可能每个都包含相同的值并且是同一类的实例,但您可以更改一个,而另一个保持不变。

0

(7) Return true if x and y refer to the same object. Otherwise return false. - 他们没有提到同一个对象。

0

因为创建了两个对象。

相关问题