警报返回假而不是真?因为类型是x和y的数字,并且根据===的文档,它严格比较检查类型和值。
var x=8;
var y=new Number(8);
alert(typeof x);
alert(y===x);//falsePS :对于JavaScript来说还是个新手,还在理解基本概念。
发布于 2015-11-13 16:44:54
布尔、数字和字符串的基元类型都有相应的对象表示,可以通过new Boolean、new String等创建对象表示。正如我已经指出的那样,这些类型返回对象。对象与数字是不同的数据类型,因此严格比较将返回false。
但是,这些构造函数并没有被广泛使用,因为,正如您所发现的,它们不适合使用原语。封装与原语数字值相同的值的Number对象(严格地)不等于所述原语值。
您可能经常看到的是在没有Number的情况下使用new函数。如果没有new调用,Number只执行类型转换,转换为原语数字值。
那么,为什么我们有Number、String和Boolean对象呢?
事实证明,你一直在使用这样的对象,而且(可能)不知道,例如当你这么做的时候。
"primitive".substring(0, 5)在JavaScript中,只有对象才能具有属性。基元值不能具有属性。然而,您可以调用substring方法,就好像它是值的属性一样。那是因为JavaScript做了一些叫做自动装箱的事情。当您试图使用像对象这样的原语值时(例如,通过访问属性),JavaScript在内部将原语临时转换为其等效的对象版本。
发布于 2015-11-13 15:27:04
这是因为当使用new实例化时,类型是object,即使该对象的名称是Number。
typeof y === "object"发布于 2015-11-13 15:27:32
Y是一个对象,而不是一个数字。新关键字引用对象。所以y是一个值为8的数字对象。
试试alert(typeof y);
https://stackoverflow.com/questions/33696067
复制相似问题