“与”的区别是什么;新编号(…)”;及;编号(…)”;用JavaScript?
在Javascript中,其中一个是“与”的区别是什么;新编号(…)”;及;编号(…)”;用JavaScript?,javascript,language-features,language-design,Javascript,Language Features,Language Design,在Javascript中,其中一个是Number构造函数: var x = Number('09'); // 9, because it defaults to decimal 受此启发,我开始思考——上述内容与以下内容之间的区别是什么: var x =new Number('09'); Number当然看起来更好,但它似乎有点不适合使用构造函数。没有新的使用它是否有任何副作用或区别?如果没有区别,为什么没有,以及新的目的是什么?SpiderMonkey-1.7.0: js> type
Number
构造函数:
var x = Number('09'); // 9, because it defaults to decimal
受此启发,我开始思考——上述内容与以下内容之间的区别是什么:
var x =new Number('09');
Number
当然看起来更好,但它似乎有点不适合使用构造函数。没有新的使用它是否有任何副作用或区别?如果没有区别,为什么没有,以及新的目的是什么?SpiderMonkey-1.7.0:
js> typeof new Number('09');
object
js> typeof Number('09');
number
在第一种情况下,您使用的是,如规范中所述,它将只执行类型转换,并返回一个
Number
原语
在第二种情况下,您将使用创建一个编号
对象:
区别可能很细微,但我认为重要的是要注意包装器对象如何作用于基本值。
Number
返回基本值。是的,你也可以将构造函数用作普通函数,这有点奇怪,但JavaScript就是这样定义的。大多数语言内置类型都有一些奇怪且不一致的额外特性,比如这样
newnumber
构造一个显式装箱的Number
对象。区别在于:
typeof Number(1) // number
typeof new Number(1) // object
与Java的盒装原语类不同,在JavaScript中,显式的Number
对象绝对没有用处
我不会为使用Number
而烦恼。如果您想显式,请使用parseFloat('09')
;如果您想简洁,请使用+'09'
;如果只允许整数,请使用parseInt('09',10)
数字(没有新的)似乎不会精确地生成原语。在下面的示例中,将调用anyMethod()(如果在数字原型中)
鉴于
3.anyMethod()
不会起作用。公平地说,
new Number('1')==new Number('1')
也是false
,但我同意你的看法:)对,因为这会比较两个不同的对象引用。@Richard Szalay-但是,Number('1')==Number('1')
是true
,这说明了@CMS的观点。+1,希望我能接受两个正确的答案,因为它们都是完全正确的,并且包含独特的有用信息。我不知道如何使用前面没有数字的+
。
Number(3).anyMethod()
3.anyMethod()