为什么是假的?
因为双相等只比较值所以它应该返回真或者它是比较引用(地址值)?
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
最佳答案
我认为这更像是一个类型强制问题。因此,您必须了解处理对象和非对象的规则和顺序。
var a = new Number(3);
var b =new Number(3);
a == b ; // false
a === b ; // false
在您的情况下,您使用 new 关键字导致您将值包装在一个对象中。 var a 和var b 是两个新的/不同的对象。 Javascript 中的对象是唯一的。所以 == 和 === 只有在比较同一对象的同一实例时才会为真。 (所以是对该对象的引用)。
这样做的原因:
var a = new Number(3);
var b = 3;
a == b ; // true
a === b; // false
是因为管理隐式类型强制的规则:
If Type(x) is either String or Number and Type(y) is Object, return the result of the comparison x == ToPrimitive(y).
If Type(x) is Object and Type(y) is either String or Number, return the result of the comparison ToPrimitive(x) == y.
所以 var a 首先被转换为原始值,然后进行比较,得到一个真值。
深入解释:https://github.com/getify/You-Dont-Know-JS/blob/master/types%20&%20grammar/ch4.md
关于使用函数构造函数创建对象时javascript双重相等比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45431450/