Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/459.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/39.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
“与”的区别是什么;新编号(…)”;及;编号(…)”;用JavaScript?_Javascript_Language Features_Language Design - Fatal编程技术网

“与”的区别是什么;新编号(…)”;及;编号(…)”;用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

在Javascript中,其中一个是
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()