它爲什麼會給出錯誤?javascript double等於使用函數構造函數創建對象時的比較
由於double等於只比較值,所以它應該返回true或比較引用(地址值)?當您創建的數字一樣,(結果如預期)
var a = new Number(3);
var b = 3;
a == b ; // true
a === b; // false
它爲什麼會給出錯誤?javascript double等於使用函數構造函數創建對象時的比較
由於double等於只比較值,所以它應該返回true或比較引用(地址值)?當您創建的數字一樣,(結果如預期)
var a = new Number(3);
var b = 3;
a == b ; // true
a === b; // false
:
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"
作爲響應。
一些額外的閱讀,我希望這一切有意義了。
我認爲這更多是一種強制性問題。因此,您必須瞭解處理對象和非對象的規則和順序。
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
它只是對象vs原始。每個「新」產生一個獨特的對象。 –
[Object and primitive type equality]的可能重複(https://stackoverflow.com/questions/21488340/object-and-primitive-type-equality) –
https://stackoverflow.com/questions/11704971/why-are - 兩個完全相同的對象,不等於至每個-其他 –