我试图理解编写 m = Number()
之间的区别(这导致 typeof m
评估为 "number"
) vs m = new Number()
(导致 typeof m
评估为 “object”
)。
无论哪种方式,我都希望它是一个对象
。我只是在胡闹,我向 Number
原型(prototype)添加了一个 .helloWorld()
方法,我能够在 m
上访问它不管我用哪种方法来实例化它。
这里有什么区别?我在编写 Number()
和 new Number()
之间有什么不同?为什么一个是对象
,而另一个是数字
?
Number()
本身返回一个数字原语。当您调用 new Number()
您收到一个对象的新实例,它表示 Number
的(relevant ES5 spec)。
当您调用基元上的属性时,基元会自动装箱(就像在 Java 中一样)到该对象的一个实例,这就是让您调用 helloWorld()
的原因。在object
或 number
.
但是,试试这个;
var x = Number(5);
x.bar = function (x) { alert(x); };
x.bar("hello");
var y = new Number(5);
y.bar = function (x) { alert(x); };
y.bar("hello");
您会看到后者有效,而前者无效;首先,number
被自动装箱到一个数字,bar
方法被添加到它(对象)。当您调用 x.bar()
您正在创建一个新 自动装箱号码,bar
不存在于。
在后者中,您要添加 bar
该 Number 实例的方法,它的行为与任何其他 Object 实例一样,因此它会在对象的整个生命周期中持续存在。