2017-08-01 73 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

相关问题