【问题标题】:What is the difference between "new Number(...)" and "Number(...)" in JavaScript?JavaScript 中的“new Number(...)”和“Number(...)”有什么区别?
【发布时间】:2011-01-23 19:05:43
【问题描述】:

在 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 确实看起来更好,但它似乎有点不恰当地使用了构造函数。不使用 new 是否有任何副作用或区别?如果没有区别,为什么不呢,new的目的是什么?

【问题讨论】:

    标签: javascript language-features language-design


    【解决方案1】:

    SpiderMonkey-1.7.0:

    js> typeof new Number('09');
    object
    js> typeof Number('09');
    number
    

    【讨论】:

      【解决方案2】:

      在第一种情况下,您使用的是规范中所述的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
      

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

      【讨论】:

      • 公平地说,new Number('1') === new Number('1') 也是false,但我同意你的看法:)
      • 对,因为这会比较两个不同的对象引用。
      • @Richard Szalay - 但是,Number('1') === Number('1')true,这说明了 @CMS 的观点。
      【解决方案3】:

      Number 返回一个原始数字值。是的,您也可以将构造函数用作普通函数,这有点奇怪,但这就是 JavaScript 的定义方式。大多数语言的内置类型都有类似这样的奇怪且不一致的额外功能。

      new Number 构造一个显式的装箱 Number 对象。区别:

      typeof Number(1)      // number
      typeof new Number(1)  // object
      

      与 Java 的盒装原始类相比,在 JavaScript 中显式的 Number 对象绝对没有用

      Number 的使用我都不会打扰。如果要明确,请使用parseFloat('09');如果你想简洁,请使用+'09';如果您只想允许整数,请使用parseInt('09', 10)

      【讨论】:

      • +1,希望我能接受两个正确的答案,因为两者都是完全正确的并且包含独特的有用信息。我不知道使用前面没有数字的+
      【解决方案4】:

      数字(没有新的)似乎并不完全是一个原语。在以下示例中,调用了 anyMethod()(如果在 Number 原型中)。

      Number(3).anyMethod()
      

      3.anyMethod()
      

      不会工作。

      【讨论】:

        猜你喜欢
        • 2018-06-03
        • 2011-02-15
        • 2012-08-12
        • 2016-03-24
        • 2012-09-23
        • 2011-06-01
        • 2014-10-22
        • 1970-01-01
        相关资源
        最近更新 更多