为什么假的?
因为双重等于仅比较值所以它应该返回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
答案 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
我希望现在一切都有意义。