在Javascript中,其中一个reliable ways to convert a string to a number是Number
构造函数:
var x = Number('09'); // 9, because it defaults to decimal
受到this question的启发,我开始疑惑 - 上述内容之间有什么区别:
var x =new Number('09');
Number
肯定看起来更好,但似乎对构造函数的使用略显不合适。没有新,是否有任何副作用或使用它的任何差异?如果没有差异,为什么不,新的目的是什么?
答案 0 :(得分:10)
在第一种情况下,您正在使用Number Constructor Called as a Function,如规范中所述,它只会执行类型转换,并返回Number
原语。
在第二种情况下,您使用Number
Constructor制作 Number
对象:
var x = Number('09');
typeof x; // 'number'
var x = new Number('09');
typeof x; // 'object'
Number('1') === new Number('1'); // false
差异可能很微妙,但我认为注意包装对象如何对原始值起作用非常重要。
答案 1 :(得分:4)
Number
返回原始数字值。是的,你可以将构造函数用作普通函数,这有点奇怪,但这就是JavaScript的定义方式。大多数语言内置类型都有奇怪且不一致的额外功能,如下所示。
new Number
构造一个明确的盒装Number
对象。区别:
typeof Number(1) // number
typeof new Number(1) // object
与Java的盒装原始类相比,在JavaScript中,显式Number
对象绝对没有用。
我不打算使用Number
。如果您想要明确,请使用parseFloat('09')
;如果你想要简洁,请使用+'09'
;如果您只想允许整数,请使用parseInt('09', 10)
。
答案 2 :(得分:0)
的SpiderMonkey-1.7.0:
js> typeof new Number('09');
object
js> typeof Number('09');
number
答案 3 :(得分:0)
数字(没有新的)似乎并不完全在原语中。在下面的示例中,调用anyMethod()(如果在Number原型中)。
Number(3).anyMethod()
尽管
3.anyMethod()
无效。