var x = Number('09'); // 9, because it defaults to decimal
Inspired by this question, I started wondering — what is the difference between the above and:
var x =new Number('09');
Number certainly looks better, but it seems like a slightly inappropriate use of a constructor. Are there any side effects or any difference to using it without the new? If there is no difference, why not, and what is the purpose of new?
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
In the second case, you are using the
Number Constructor to make a
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.
new Number constructs an explicit boxed
Number object. The difference:
typeof Number(1) // number typeof new Number(1) // object
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
js> typeof new Number('09'); object js> typeof Number('09'); number
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).
will not work.
©2020 All rights reserved.