모든 숫자, 숫자입니다. 문자열은 숫자처럼 보이며 숫자입니다. 그 밖의 모든 것은 NaN입니다.
'a' => NaN
'1' => 1
1 => 1
답변
내가 아는 한 4 가지 방법이 있습니다.
Number(x);
parseInt(x, 10);
parseFloat(x);
+x;
제가 만든이 빠른 테스트를 통해 실제로 브라우저에 따라 다릅니다.
http://jsperf.com/best-of-string-to-number-conversion/2
Implicit
3 개의 브라우저에서 가장 빠르지 만 코드를 읽기 어렵게 만듭니다. 그러니 원하는대로 선택하세요!
답변
이를 수행하는 방법은 최소 5 가지입니다.
정수로만 변환하려는 경우 또 다른 빠른 (짧은) 방법은 이중 비트가 아닌 (즉, 두 개의 물결표 문자 사용)입니다.
예 :
~~x;
참조 : http://james.padolsey.com/cool-stuff/double-bitwise-not/
지금까지 내가 알고있는 5 가지 일반적인 방법으로 문자열을 숫자로 변환하는 방법은 모두 차이가 있습니다 (작동하는 비트 연산자가 더 많지만 모두 동일한 결과를 제공합니다 ~~
). 이 JSFiddle은 디버그 콘솔에서 기대할 수있는 다양한 결과를 보여줍니다. http://jsfiddle.net/TrueBlueAussie/j7x0q0e3/22/
var values = ["123",
undefined,
"not a number",
"123.45",
"1234 error",
"2147483648",
"4999999999"
];
for (var i = 0; i < values.length; i++){
var x = values[i];
console.log(x);
console.log(" Number(x) = " + Number(x));
console.log(" parseInt(x, 10) = " + parseInt(x, 10));
console.log(" parseFloat(x) = " + parseFloat(x));
console.log(" +x = " + +x);
console.log(" ~~x = " + ~~x);
}
디버그 콘솔 :
123
Number(x) = 123
parseInt(x, 10) = 123
parseFloat(x) = 123
+x = 123
~~x = 123
undefined
Number(x) = NaN
parseInt(x, 10) = NaN
parseFloat(x) = NaN
+x = NaN
~~x = 0
null
Number(x) = 0
parseInt(x, 10) = NaN
parseFloat(x) = NaN
+x = 0
~~x = 0
"not a number"
Number(x) = NaN
parseInt(x, 10) = NaN
parseFloat(x) = NaN
+x = NaN
~~x = 0
123.45
Number(x) = 123.45
parseInt(x, 10) = 123
parseFloat(x) = 123.45
+x = 123.45
~~x = 123
1234 error
Number(x) = NaN
parseInt(x, 10) = 1234
parseFloat(x) = 1234
+x = NaN
~~x = 0
2147483648
Number(x) = 2147483648
parseInt(x, 10) = 2147483648
parseFloat(x) = 2147483648
+x = 2147483648
~~x = -2147483648
4999999999
Number(x) = 4999999999
parseInt(x, 10) = 4999999999
parseFloat(x) = 4999999999
+x = 4999999999
~~x = 705032703
~~x
버전 다른 사람들이 종종 초래 “더”경우에 다수의 결과 undefined
만이 잘못된 입력 실패 (예를 들면 그것은 반환 0
문자열이 숫자가 아닌 문자가 포함 된 경우 후를 유효한 숫자).
과다
참고 : 정수 오버플로 및 / 또는 비트 잘림은에서 발생할 수 ~~
있지만 다른 변환에서는 발생할 수 없습니다. 이렇게 큰 값을 입력하는 것은 드문 일이지만이를 알고 있어야합니다. 훨씬 더 큰 값을 포함하도록 예제가 업데이트되었습니다.
일부 Perf 테스트에 따르면 표준 parseInt
및 parseFloat
기능이 실제로 가장 빠른 옵션이며, 아마도 브라우저에 의해 고도로 최적화되었지만 모든 옵션이 충분히 빠르기 때문에 모두 요구 사항에 따라 다릅니다 . http://jsperf.com/best-of-string-to -숫자 변환 / 37
이것은 모두 parseInt / parseFloat가 훨씬 더 느리게 보이기 때문에 성능 테스트가 어떻게 구성되어 있는지에 달려 있습니다.
내 이론은 :
- 거짓말
- 젠장 라인
- 통계
- JSPerf 결과 🙂
답변
+
연산자를 문자열 앞에 붙 입니다.
console.log(+'a') // NaN
console.log(+'1') // 1
console.log(+1) // 1
답변
문자열을 정수로 변환하는 빠른 방법은 비트 단위 또는 다음과 같이 사용하는 것입니다.
x | 0
구현 방법에 따라 다르지만 이론적으로 +x
는 먼저 x
숫자로 캐스팅 한 다음 매우 효율적으로 수행 할 것이기 때문에 이론적으로는 상대적으로 빠릅니다 (최소한 ) .
답변
다음은 간단한 방법입니다. var num = Number (str); 이 예에서 str 은 문자열을 포함하는 변수입니다. 테스트하고 작동 방식을 확인할 수 있습니다. Google 크롬 개발자 도구 , 콘솔 로 이동 하여 다음 코드를 붙여 넣습니다. 변환이 수행되는 방법을 더 잘 이해하려면 주석을 읽으십시오.
// Here Im creating my variable as a string
var str = "258";
// here im printing the string variable: str
console.log ( str );
// here Im using typeof , this tells me that the variable str is the type: string
console.log ("The variable str is type: " + typeof str);
// here is where the conversion happens
// Number will take the string in the parentesis and transform it to a variable num as type: number
var num = Number(str);
console.log ("The variable num is type: " + typeof num);
답변
나는 그것이 num * 1
간단하고 명확하며 정수와 수레에서 작동 한다는 것을 알았습니다 …
답변
이것은 아마도 그렇게 빠르지는 않지만 귀하의 숫자가 적어도 특정 값 (예 : 0) 또는 최대 특정 값인지 확인하는 추가 이점이 있습니다.
Math.max(input, 0);
최소값을 보장해야하는 경우 일반적으로
var number = Number(input);
if (number < 0) number = 0;
Math.max(..., 0)
두 개의 문장을 작성하지 않아도됩니다.