parseInt()와 Number()의 차이점은 무엇입니까?
문자열을 숫자로 변환할 때 어떻게 달라집니까?
두 함수는 의미적으로 다릅니다. 함수로 호출되는 생성자는 유형 변환을 수행하고 구문 분석을 수행합니다. 예를 들어 다음과 같습니다.
// parsing:
parseInt("20px"); // 20
parseInt("10100", 2); // 20
parseInt("2e1"); // 2
// type conversion
Number("20px"); // NaN
Number("2e1"); // 20, exponential notation
한 also도.parseInt
는 현재 사용되고 있는 베이스의 숫자와 일치하지 않는 후행 문자를 무시합니다.
Number
생성자는 암묵적인 8진수를 검출하지 않지만 명시적인 8진수 표기는 검출할 수 있습니다.
Number("010"); // 10
Number("0o10") // 8, explicit octal
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)
첫 번째 2개는 오브젝트 대신 프리미티브를 반환하기 때문에 퍼포먼스가 향상됩니다.
가지 하느냐이다.undefined
★★★★★★★★★★★★★★★★★」null
,
Number() Or Number(null) Or Number('') // returns 0
하는 동안에
parseInt() Or parseInt(null) // returns NaN
요약:.
parseInt()
:
- 문자열을 첫 번째 인수로 사용합니다. 기수(십진수 10 또는 이진수 2)는 두 번째 인수로 사용합니다.
- 첫 문자를 할 수 없는 합니다.
NaN
환됩니니다다 - 경우,
parseInt()
함수가 숫자가 아닌 값을 발견하면 입력 문자열의 나머지 부분이 절단되고 숫자가 아닌 값이 될 때까지 부분만 구문 분석됩니다. - 기수가 다음과 같은 경우
undefined
0으로 하다- 입력 문자열이 "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
퍼포먼스를 요구하고 있는 경우는, 비트의 오른쪽 시프트로 얻을 수 있는 최선의 결과를 얻을 수 있습니다."10">>0
. 곱셈("10" * 1
() 또는 (없음)~~"10"
)는, 모두, 보다 고속으로 동작하고 있습니다.Number
그리고.parseInt
숫자 인수가 아닌 경우 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
parseInt()
-> 지정된 리딕스로 번호를 해석합니다.
Number()
-> 지정된 값을 해당 수치 또는 NaN으로 변환하지 못할 경우 변환합니다.
따라서 숫자 이외의 값을 숫자로 변환하려면 항상 Number() 함수를 사용해야 합니다.
예:
Number("")//0
parseInt("")//NaN
Number("123")//123
parseInt("123")//123
Number("123ac") //NaN,as it is a non numeric string
parsInt("123ac") //123,it parse decimal number outof string
Number(true)//1
parseInt(true) //NaN
하기에는 여러 가지 궁지에 몰린 경우가 있다parseInt()
redix 변환과 같이 기능하기 때문에 parseInt() 함수를 컨버전스 목적으로 사용하지 않도록 합니다.
이제 날씨를 확인하려면 제공된 값이 숫자인지 아닌지, 우리는 네이티브를 사용해야 합니다.isNaN()
기능.
항상 parseInt를 사용하지만 강제로 8진수 모드가 될 수 있는 선행 0에 주의하십시오.
파싱에서 멀리 떨어져 있는 것이 좋습니다.16진수 또는 8진수가 필요하지 않은 경우 입력 및 숫자와 Math.round를 사용합니다.둘 다 문자열을 사용할 수 있습니다.왜 가까이 가지 않는 거죠?
parseInt(0.001, 10)
0
parseInt(-0.0000000001, 10)
-1
parseInt(0.0000000001, 10)
1
parseInt(4000000000000000000000, 10)
4
그것은 완전히 큰 숫자와 작은 숫자들을 도살한다.이상하게도 이 입력이 문자열이면 정상적으로 동작합니다.
parseInt("-0.0000000001", 10)
0
parseInt("0.0000000001", 10)
0
parseInt("4000000000000000000000", 10)
4e+21
이것이나 다른 gotcha로 버그를 찾기 어려운 위험을 감수하는 대신, 저는 그냥 피하겠습니다.parseInt
베이스 10 이외의 것을 해석할 필요가 없는 한 말이죠. Number
,Math.round
,Math.floor
, , , , 입니다..toFixed(0)
을 할 수 parseInt
이러한 종류의 버그가 없는 경우에 사용할 수 있습니다.
파스를 정말로 원하거나 사용할 필요가 있는 경우기타 일부 품질에 대해서는 플로트를 int로 변환하는 데 사용하지 마십시오.
parseInt는 정수로 변환합니다.즉, 소수점을 삭제합니다.숫자는 정수로 변환되지 않습니다.
결과를 얻는 또 다른 방법은 ~ 연산자를 사용하는 것입니다.
대부분의 경우
~~someThing === parseInt(something)
~는 해석하는 문자열에 대해 0을 반환합니다.Int는 다른 문자 후행 또는 숫자 기반 사양(예: 16진수)을 허용하며 구문 분석 시 0을 반환합니다.Int는 NaN을 반환합니다.또 다른 차이점은 bigint를 지정하면 bigint를 반환한다는 것입니다.이것에 다른 bigint를 추가할 수 있습니다.bigint가 클 경우 int는 일반적인 부동소수점 번호(yes really - parseFloat과 동일한 값을 제공합니다)를 반환합니다.
그러나 대부분의 경우 ~은 parseInt보다 30% 빠릅니다.문자열로 표현되는 부동 소수점일 경우 속도가 10% 느려집니다.
따라서 ~의 제한된 범위가 요구에 맞는다면 컴퓨터 시간을 절약하고 입력에 드는 시간을 줄일 수 있습니다.
언급URL : https://stackoverflow.com/questions/4090518/what-is-the-difference-between-parseint-and-number
'programing' 카테고리의 다른 글
1개의 INSERT에 여러 행의 ID를 삽입하려면 어떻게 해야 합니까? (0) | 2022.10.21 |
---|---|
Java 8 lamda 목록에서 요소 가져오기 및 제거 (0) | 2022.10.21 |
"읽기 전용" 속성을 추가하는 방법"읽기 전용" 속성을 추가하는 방법?? (0) | 2022.10.21 |
ELB를 통한 mariadb galera 클러스터를 사용하는 grails 애플리케이션에서 Mysql 연결 시간 초과 (0) | 2022.10.21 |
vuej 마운트된 라이프 사이클이 트리거되지 않음 (0) | 2022.10.21 |