What is the difference between “new Number(…)” and “Number(…)” in JavaScript?

后端 未结 4 699
青春惊慌失措
青春惊慌失措 2020-12-02 01:48

In Javascript, one of the reliable ways to convert a string to a number is the Number constructor:

var x = Number(\'09\'); // 9, because it defa         


        
相关标签:
4条回答
  • 2020-12-02 02:24

    SpiderMonkey-1.7.0:

    js> typeof new Number('09');
    object
    js> typeof Number('09');
    number
    
    0 讨论(0)
  • 2020-12-02 02:27

    Number (without new) doesn't seem to result exactly in a primitive. In the following example the anyMethod() is called (if in the Number prototype).

    Number(3).anyMethod()
    

    Whereas

    3.anyMethod()
    

    will not work.

    0 讨论(0)
  • 2020-12-02 02:33

    In the first case, you are using the Number Constructor Called as a Function, as described in the Specification, that will simply perform a type conversion, returning you a Number primitive.

    In the second case, you are using the Number Constructor to make a Number object:

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

    The difference may be subtle, but I think it's important to notice how wrapper objects act on primitive values.

    0 讨论(0)
  • 2020-12-02 02:37

    Number returns a primitive number value. Yeah, it's a bit odd that you can use a constructor function as a plain function too, but that's just how JavaScript is defined. Most of the language built-in types have weird and inconsistent extra features like this thrown in.

    new Number constructs an explicit boxed Number object. The difference:

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

    In contrast to Java's boxed primitive classes, in JavaScript explicit Number objects are of absolutely no use.

    I wouldn't bother with either use of Number. If you want to be explicit, use parseFloat('09'); if you want to be terse, use +'09'; if you want to allow only integers, use parseInt('09', 10).

    0 讨论(0)
提交回复
热议问题