JavaScript中的"new Number(...)"和"Number(...)"有什么区别?

Nic*_*ole 9 javascript language-features language-design

在Javascript中,将字符串转换为数字可靠方法之一是Number构造函数:

var x = Number('09'); // 9, because it defaults to decimal
Run Code Online (Sandbox Code Playgroud)

这个问题的启发,我开始疑惑 - 上面和之间的区别是什么:

var x =new Number('09');
Run Code Online (Sandbox Code Playgroud)

Number当然看起来更好,但似乎对构造函数的使用略显不合适.没有新的使用它是否有任何副作用或任何差异?如果没有区别,为什么不,的目的是什么?

CMS*_*CMS 13

在第一种情况下,您正在使用被称为函数数字构造函数,如规范中所述,它将简单地执行类型转换,返回Number基元.

在第二种情况下,您使用Number构造函数来创建Number对象:

var x = Number('09');
typeof x; // 'number'

var x = new Number('09');
typeof x; // 'object'

Number('1') === new Number('1'); // false
Run Code Online (Sandbox Code Playgroud)

差异可能很微妙,但我认为重要的是要注意包装器对象如何作用于原始值.