2012-12-28 80 views
4

可能重複:
Why [] == [] is false in javascript?比較JavaScript的數組

我想請教一下奇怪的事情,即:

var x = "pl"; 
var y = ["pl"]; 
[x] == y; // false - why? 
x == y; // true - how ? 
x === y; // false - okay 

有人能解釋一下嗎?

在此先感謝。比較這將永遠是假的,除非對象實際上相同的對象如果對象被強制轉換爲 -

回答

4

,因爲你比較兩個數組(這是對象)第一個是假的不同類型的價值,如第二次比較。

在第二次比較中,y被強制爲字符串值,然後發現等於"pl"

例如,下面的代碼:

["pl"] + "foo" → "plfoo" 

順便說一句,這就是爲什麼你應該總是使用===而不是== - 它不會導致任何奇怪的強制。這就是爲什麼第三次比較是錯誤的。

+0

OK,然後解釋:「你好」,「約翰」] ==「你好,約翰」 //真正 – cojack

+0

'[X] ==ÿ '進行淺層比較,並且由於兩者不引用相同的數組,所以它返回false。 – spinningarrow

+0

@cojack'['a','b','c']。toString()'→''a,b,c'' – jrajav

2

在陣列(抽象相等比較)

[x] == y; // false - why? 

[x]y不指代相同的對象。 Arraysobjects==運算符測試它們是相同的對象,而不是簡單的兩個對象具有相同的值的所有屬性。爲了確定中的對象相等方式,您必須手動枚舉每個對象的屬性並測試每個值。

==使用The Abstract Equality Comparison Algorithm:如果x和y是指相同的對象

返回真。否則,返回false。

字符串陣列(抽象相等比較)

x == y; // true - how ? oO 

y,陣列,因爲你比較它與x,一個字符串時使用==被強制爲一個字符串。

==使用The Abstract Equality Comparison Algorithm

如果Type(x)是String或數目和類型(y)爲對象,返回 比較X == ToPrimitive(Y)的結果。

字符串數組(全等比較)

x === y; // fasle - okey 

===,不像==,將要挾y成字符串......所以,你要比較的字符串的目的。

===使用The Strict Equality Comparison Algorithm

如果Type(x)是從式(y)的不同,返回false。

0
[x] == y; 

[ 'PL'] == [ 'P1'] - 在存儲器上比較2個不同的陣列參

x == y; 

同爲 「PL」 == [ 「P1」]的ToString()。 JS第二個參數轉換爲字符串,因爲第一個也是字符串