A: 

SpiderMonkey-1.7.0:

js> typeof new Number('09');
object
js> typeof Number('09');
number
just somebody
+4  A: 

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.

CMS
To be fair, `new Number('1') === new Number('1')` is also `false`, but I otherwise agree with you :)
Richard Szalay
Right, because that will compare two different object references.
CMS
@Richard Szalay - but, `Number('1') === Number('1')` is `true`, which illustrates @CMS's point.
Renesis
@CMS - +1 for the link. That is very useful.
Renesis
@Renesis: You are welcome, enjoy the spec!
CMS
+2  A: 

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).

bobince
+1, wish I could accept two answers as correct, since both are fully correct and contain unique helpful information. I didn't know about using `+` with no number preceding it.
Renesis