javascript double等于使用函数构造函数创建对象时的比较
问题描述:
它为什么会给出错误?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 - 两个完全相同的对象,不等于至每个-其他 –