过去多啦不再A梦2017-05-19 10:46:27
比較操作符中的相等運算符,有詳細的介紹:
相等(==)
比較運算子會為兩個不同類型的運算元轉換類型,然後進行嚴格比較。當兩個運算元都是物件時,JavaScript會比較其內部引用,當且僅當他們的引用指向記憶體中的相同物件(區域)時才相等,也就是他們在堆疊記憶體中的參考位址相同。
樓上說的都對,因為[1] == [1]中,兩個陣列是不同的對象,所以不相等。
習慣沉默2017-05-19 10:46:27
Ecma-262.pdf
7.2.13 抽象平等比較
已經明確說明了,這裡的 [1] = [1]
实际是 [1] === [1]
豐盛實驗第一條。
比較 x == y(其中 x 和 y 是值)會產生 true 或 false。這樣的比較執行如下:
如果 Type(x) 與 Type(y) 相同,則 a.返回執行嚴格相等比較的結果 x === y.
如果 x 為 null 且 y 未定義,則傳回 true。
如果 x 未定義且 y 為 null,則傳回 true。
如果 Type(x) 為 Number,Type(y) 為 String,則傳回比較結果 x == ToNumber(y)。
如果 Type(x) 為 String,Type(y) 為 Number,則傳回比較結果 ToNumber(x) == y。
如果 Type(x) 為 Boolean,則傳回比較結果 ToNumber(x) == y.
如果 Type(y) 為 Boolean,則傳回比較結果 x == ToNumber(y)。
如果 Type(x) 是 String、Number 或 Symbol 且 Type(y) 是 Object,則傳回比較結果 x ==
ToPrimitive(y).
如果 Type(x) 為 Object,Type(y) 為 String、Number 或 Symbol,則傳回比較結果 ToPrimitive(x)
== y.
回傳錯誤。