2016-08-24 129 views
1

我想了解JavaScript身份和相等運算符的怪異行爲,如下所示。JavaScript中的對象比較

var a = {}; 
var b = {}; 
a === b; //false 
a == b; //false 

var c = ''; 
var d = ''; 
c === d; //true 
c == d; //true 

所有四個變量abcd都是對象。但是在比較它們時,第一種情況產生錯誤,而第二種情況則爲錯

我研究從以下來源比較:https://msdn.microsoft.com/en-us/library/d53a7bd4(v=vs.94).aspx

根據上述文章,除了數量和布爾一切通過引用而不是值進行比較。那麼第一個案例如何返回錯誤而第二個錯誤是真實的。

+0

'所以第一種情況如何返回true,第二個左右false.'其他方式,第一種是假的,第二個是真正的 –

+3

字符串是原語。歡迎來到美麗的JS世界。 –

+0

可能重複[Is String原始類型或對象在Javascript?](http://stackoverflow.com/questions/7675127/is-string-a-primitive-type-or-object-in-javascript) –

回答

1

在你的榜樣cd是字符串,which are primitive types in JavaScript and compared by value

因此,c == d返回true

這篇文章談論的是string objects創建的這個new String('foo')構造函數,它實際上創建了對象。在這種情況下,比較參考文獻,返回false

console.log(new String('foo') == new String('foo')) // false 
 
console.log('foo' == 'foo')       // true

0

A(原始)字符串是一個值類型(如Number)。因此===比較它的值(相等)。

對象是引用類型,對於它們,===比較標識。

字符串有點瘋狂,因爲有原始字符串和String對象(使用new String("foo")創建)。


==工作方式===只是它的類型轉換到「使可能的話事情等於」相同。對於引用類型,它與===相同,只是它也將原始字符串和String對象等同起來。

"abc" == new String("abc"); 
"abc" !== new String("abc"); 
+1

雖然沒有回答關於對象的問題,但是...... –