Number()vs new Number()?

tem*_*ame 8 javascript prototype object

我试图理解写作m = Number()(导致typeof m评估为"number")vs m = new Number()(导致typeof m评估为"object")之间的区别.

我原以为它是一种object方式.我只是搞乱了,我.helloWorld()Number原型中添加了一个方法,m无论用什么方法实例化它,我都可以访问它.

这有什么区别?我在写作Number()和做什么之间有什么不同new Number()?为什么一个是object另一个是一个number

Mat*_*att 4

Number()本身返回一个数字基元。当您调用时,new Number()您会收到一个代表 's 的新对象实例Number相关 ES5 规范)。

当您调用基元上的属性时,基元会自动装箱(就像在 Java 中一样)到该对象的实例,这使您可以调用helloWorld()objectnumber

不过,试试这个;

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");
Run Code Online (Sandbox Code Playgroud)

你会看到后者有效,而前者则无效;在第一个中, 被number自动装箱为一个数字,并将bar方法添加到它(对象)。当您拨打电话时,x.bar()您正在创建一个新的自动装箱号码,该号码bar不存在。

在后者中,您bar向该 Number 实例添加一个方法,该方法的行为与任何其他 Object 实例类似,因此它在该对象的整个生命周期中持续存在。