[javascript] parseInt ()와 Number ()의 차이점은 무엇입니까?

어떻게 parseInt()Number()숫자로 문자열을 변환 할 때 다르게 행동?



답변

글쎄, 그들은는 의미 다른Number함수로 호출 생성자 를 수행 형식 변환parseInt수행이 구문 분석 예 :

// parsing:
parseInt("20px");       // 20
parseInt("10100", 2);   // 20
parseInt("2e1");        // 2

// type conversion
Number("20px");       // NaN
Number("2e1");        // 20, exponential notation

경우에 있다는 사실을 숙지 parseInt그것의 (검출이 문자열에 앞에 0, 8 진수 자료의 수를 구문 분석,이 ECMAScript를 5, 표준 새 버전에서 변경되었습니다,하지만 브라우저 구현에 도착하는 데 시간이 오래 걸릴 ECMAScript 3과의 비 호환성parseInt 인해 현재 사용중인베이스의 숫자와 일치하지 않는 후행 문자는 무시합니다.

Number생성자는 8 진수를 감지하지 않습니다

Number("010");         // 10
parseInt("010");       // 8, implicit octal
parseInt("010", 10);   // 10, decimal radix used

그러나 다음과 같이 16 진수 표기법으로 숫자를 처리 할 수 ​​있습니다 parseInt.

Number("0xF");   // 15
parseInt("0xF"); //15

또한 숫자 형식 변환을 수행하는 데 널리 사용되는 구문은 단항 +연산자 (p. 72) 이며 Number생성자를 함수로 사용하는 것과 같습니다 .

+"2e1";   // 20
+"0xF";   // 15
+"010";   // 10


답변

typeof parseInt("123") => number
typeof Number("123") => number
typeof new Number("123") => object (Number primitive wrapper object)

처음 두 개는 객체 대신 기본 요소를 반환하므로 성능이 향상됩니다.


답변

성능을 찾고 있다면 아마도 최상의 결과를 얻을 수있을 것 "10">>0입니다. 또한 곱하기 ( "10" * 1) 또는 안함 ( ~~"10"). 그들 모두는 훨씬 빠르게의입니다 NumberparseInt. 숫자 인수가 아닌 경우 “feature”가 0을 반환합니다. 성능 테스트 는 다음과 같습니다 .


답변

로 변환 string하는 여러 가지 방법 중 두 가지 성능 링크가 비교 되었습니다 int.

parseInt(str,10)
parseFloat(str)
str << 0
+str
str*1
str-0
Number(str)

http://jsben.ch/#/zGJHM

http://phrogz.net/js/string_to_number.html


답변

하나 개의 작은 차이가의 변환 무엇 undefined이나 null,

Number() Or Number(null) // returns 0

동안

parseInt() Or parseInt(null) // returns NaN


답변

요약:

parseInt():

  • 문자열을 첫 번째 인수로, 기수 (숫자 시스템의 기초 인 정수 (예 : 10 진수 10 또는 이진 2))를 두 번째 인수로 사용합니다.
  • 첫 문자를 숫자로 변환 할 수없는 경우이 함수는 정수를 반환합니다. NaN 반환됩니다.
  • 만약 parseInt() 함수는 숫자 이외의 값을 발견, 그것은 입력 문자열의 나머지 부분을 잘라 만이 아닌 수치까지 부분을 구문 분석합니다.
  • 기수가 undefined0이면 JS는 다음을 가정합니다.
    • 입력 문자열이 “0x”또는 “0X”로 시작하면 기수가 16 (16 진수)이고 나머지 문자열은 숫자로 구문 분석됩니다.
    • 입력 값이 0으로 시작하면 기수는 8 (8 진수) 또는 10 (10 진수)입니다. 선택되는 기수는 JS 엔진 구현에 따라 다릅니다. ES5그런 다음 10을 사용해야한다고 지정합니다. 그러나 모든 브라우저에서 지원되는 것은 아니므로 숫자가 0으로 시작할 수 있으면 항상 기수를 지정하십시오.
    • 입력 값이 임의의 숫자로 시작하면 기수가 10이됩니다.

Number():

  • Number()생성자는 숫자에 어떤 인수 입력을 변환 할 수 있습니다. Number()생성자가 입력을 숫자로 변환 할 수없는 경우 NaN반환됩니다.
  • 또한 Number()생성자는 16 진수를 처리 할 수 ​​있으며로 시작해야 0x합니다.

예:

console.log(parseInt('0xF', 16));  // 15

// z is no number, it will only evaluate 0xF, therefore 15 is logged
console.log(parseInt('0xFz123', 16));

// because the radix is 10, A is considered a letter not a number (like in Hexadecimal)
// Therefore, A will be cut off the string and 10 is logged
console.log(parseInt('10A', 10));  // 10

// first character isnot a number, therefore parseInt will return NaN
console.log(parseInt('a1213', 10));


console.log('\n');


// start with 0X, therefore Number will interpret it as a hexadecimal value
console.log(Number('0x11'));

// Cannot be converted to a number, NaN will be returned, notice that
// the number constructor will not cut off a non number part like parseInt does
console.log(Number('123A'));

// scientific notation is allowed
console.log(Number('152e-1'));  // 15.21


답변

나는 항상 parseInt를 사용하지만 8 진 모드 로 강제하는 선행 0을 조심하십시오 .