当使用函数构造函数创建对象时,javascript double等于比较

时间:2017-08-01 07:25:24

标签: javascript

为什么假的?

因为双重等于仅比较值所以它应该返回true或是它比较引用(地址值)?

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

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

如下所示返回true :(按预期结果)

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

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

2 个答案:

答案 0 :(得分:1)

我认为这更像是一种强制性问题。因此,您必须了解处理对象和非对象的规则和顺序。

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

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

在您的情况下,使用 new 关键字会导致您将值包装在对象中。 var a var b 是两个新的/不同的对象。 Javascript中的对象是唯一的。因此,如果您要比较同一对象的相同实例,则 == === 将仅为True。 (所以对该对象的引用)。

这是有效的原因:

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

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

是因为管理隐式强制的规则:

  

如果Type(x)是String或Number而Type(y)是Object,则返回   比较结果x == ToPrimitive(y)。

     

如果Type(x)是Object   和Type(y)是String或Number,返回结果   比较ToPrimitive(x)== y。

所以 var a 首先转换为原始值,然后进行比较,得到一个真值。

有关深入解释:https://github.com/getify/You-Dont-Know-JS/blob/master/types%20&%20grammar/ch4.md

答案 1 :(得分:0)

当你创建这样的数字时:

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

您正在创建唯一对象。 如果您在控制台中输入

typeof(a)

你会看到

"object"

作为回应。这同样适用于b变量。 因此它们并不相同。

但是当你这样做时:

var x = 1; var y = 2;

并检查typeof x和y,您会看到"number"作为回复。

以下是您的额外阅读Number in Javascript

我希望现在一切都有意义。