2010-03-04 2 views
7

자바 스크립트에서 reliable ways to convert a string to a number 중 하나가 Number 생성자 :JavaScript의 "new Number (...)"와 "Number (...)"의 차이점은 무엇입니까?

var x =new Number('09'); 

Number 확실히 좋아 보이는 :

var x = Number('09'); // 9, because it defaults to decimal 

this question에서 영감을, 나는 위의 차이가 무엇인지 — 궁금 시작 하지만 생성자를 약간 부적절하게 사용하는 것처럼 보입니다. 없이 부작용이 있거나 사용하는 것과 다른 점이 있습니까? 차이가 없다면 왜 안되며 의 목적은 무엇입니까?

답변

10

하면 상기 Number Constructor Called as a Function를 사용하고있다. 두 번째 경우

, 당신은 Number 객체를 만들기 위해 Number Constructor을 사용하고 있습니다 :

var x = Number('09'); 
typeof x; // 'number' 

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

Number('1') === new Number('1'); // false 

의 차이는 미묘한있을 수 있습니다,하지만 난 그게 래퍼 원시적 행위 객체를 어떻게 알 것이 중요하다고 생각 값.

+1

새 번호 ('1') === 새 번호 ('1')'도 '거짓'이지만 그렇지 않으면 동의합니다. –

+1

맞아요, 참조. – CMS

+0

@Richard Szalay -하지만 'Number ('1 ') === Number ('1 ')'은'true'로, @ CMS의 요점을 보여줍니다. – Nicole

0

의 SpiderMonkey-1.7.0 : 당신은 Number 프리미티브 복귀 단순히 형 변환을 수행 할 명세서에 기술 된 바와 같이 첫 번째 경우

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

Number은 원시 숫자 값을 반환합니다. 예, 생성자 함수를 일반 함수로 사용할 수 있다는 것이 다소 이상합니다. 그러나 JavaScript가 정의 된 것입니다. 대부분의 언어 기본 제공 유형에는 이와 같이 이상하고 일관성없는 추가 기능이 있습니다.

new Number은 명시적인 박스형 Number 개체를 생성합니다. 차이 : 자바의 박스 프리미티브 (primitive) 클래스는 대조적으로

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

, 자바 스크립트를 명시 적 Number 객체에서이 전혀 사용의이다.

Number을 사용하는 데 신경 쓰지 않을 것입니다. 명시 적으로 나타내려면 parseFloat('09')을 사용하십시오. 간결 해지고 싶다면 +'09'; 정수만 허용하려면 parseInt('09', 10)을 사용하십시오.

+0

+1, 두 가지 대답이 모두 정확하고 고유 한 유용한 정보가 포함되어 있으므로 두 가지 대답을 올바르게 받아 들일 수 있기를 바랍니다. 나는 그것 앞에 숫자가없는'+'를 사용하는 것에 관해 몰랐다. – Nicole

0

숫자 (신규 없음)는 프리미티브에서 정확하게 발생하지 않는 것 같습니다. 다음 예제에서는 anyMethod()가 호출됩니다 (Number 프로토 타입에있는 경우).

Number(3).anyMethod() 

3.anyMethod() 

가 작동하지 않습니다 반면.

관련 문제