어떻게 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"
). 그들 모두는 훨씬 빠르게의입니다 Number
및 parseInt
. 숫자 인수가 아닌 경우 “feature”가 0을 반환합니다. 성능 테스트 는 다음과 같습니다 .
답변
로 변환 string
하는 여러 가지 방법 중 두 가지 성능 링크가 비교 되었습니다 int
.
parseInt(str,10)
parseFloat(str)
str << 0
+str
str*1
str-0
Number(str)
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()
함수는 숫자 이외의 값을 발견, 그것은 입력 문자열의 나머지 부분을 잘라 만이 아닌 수치까지 부분을 구문 분석합니다. - 기수가
undefined
0이면 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을 조심하십시오 .