2017-08-01 100 views
2

它爲什麼會給出錯誤?javascript double等於使用函數構造函數創建對象時的比較

由於double等於只比較值,所以它應該返回true或比較引用(地址值)?當您創建的數字一樣,(結果如預期)

var a = new Number(3); 
var b = 3; 

a == b ; // true 
a === b; // false 
+2

它只是對象vs原始。每個「新」產生一個獨特的對象。 –

+0

[Object and primitive type equality]的可能重複(https://stackoverflow.com/questions/21488340/object-and-primitive-type-equality) –

+0

https://stackoverflow.com/questions/11704971/why-are - 兩個完全相同的對象,不等於至每個-其他 –

回答

0

var a = new Number(3); 
var b =new Number(3); 

你正在創建唯一對象

var a = new Number(3); 
var b =new Number(3); 

a == b ; // false 
a === b ; // false 

如下返回true。 如果您鍵入到您的控制檯

typeof(a) 

這個你會看到

"object" 

由於反應。這同樣適用於b變量。 因此它們並不相等。

但是當你這樣做時:

var x = 1; var y = 2;

並檢查typeof x和y您將看到"number"作爲響應。

這裏是你Number in Javascript

一些額外的閱讀,我希望這一切有意義了。

1

我認爲這更多是一種強制性問題。因此,您必須瞭解處理對象和非對象的規則和順序。

var a = new Number(3); 
var b =new Number(3); 

a == b ; // false 
a === b ; // false 

在您的情況您使用關鍵字導致你包裹在一個對象的值。 var a and var b是兩個新的/不同的對象。 Javascript中的對象是獨一無二的。所以=====只有在比較相同對象的相同實例時才爲真。 (所以參考那個對象)。

的原因,這個工程:

var a = new Number(3); 
var b = 3; 

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

是因爲支配隱式類型轉換的規則:

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

如果Type(x)是Object 而Type(y)是String或Number,則返回 比較ToPrimitive(x)== y的結果。

所以變種一個首先被轉化爲原始值,然後進行比較從而產生真值。

對於深入的解釋:https://github.com/getify/You-Dont-Know-JS/blob/master/types%20&%20grammar/ch4.md

相關問題