어떤게 더 좋아?
나는 number (x) 대신 + x를 사용할 수 있기 때문에 몇 바이트를 면도하기 위해 이것을 요구하고 있습니다. parsefloat가 더 잘 작동합니까?
어떤게 더 좋아?
나는 number (x) 대신 + x를 사용할 수 있기 때문에 몇 바이트를 면도하기 위해 이것을 요구하고 있습니다. parsefloat가 더 잘 작동합니까?
답변:
parseFloat
/ parseInt
는 문자열을 구문 분석하기위한 것이고 Number
/ +
는 값을 숫자로 강제 변환하기위한 것입니다. 그들은 다르게 행동합니다. 그러나 먼저 그들이 똑같이 행동하는 곳을 살펴 봅시다.
parseFloat('3'); // => 3
Number('3'); // => 3
parseFloat('1.501'); // => 1.501
Number('1.501'); // => 1.501
parseFloat('1e10'); // => 10000000000
Number('1e10'); // => 10000000000
따라서 표준 숫자 입력이 있으면 차이는 없습니다. 그러나 입력이 숫자로 시작하고 다른 문자가 포함 된 parseFloat
경우 문자열에서 숫자를 자르고 숫자 Number
는 제공 NaN
하지 않습니다.
parseFloat('1x'); // => 1
Number('1x'); // => NaN
또한 Number
16 진수 입력을 이해하지만 다음 parseFloat
은 수행하지 않습니다.
parseFloat('0x10'); // => 0
Number('0x10'); // => 16
그러나 Number
빈 문자열이나 공백 만 포함 된 문자열에서는 이상하게 작동합니다.
parseFloat(''); // => NaN
Number(''); // => 0
parseFloat(' \r\n\t'); // => NaN
Number(' \r\n\t'); // => 0
전반적으로 나는 Number
더 합리적이라고 생각하므로 거의 항상 Number
개인적으로 사용합니다 (그리고 많은 내부 JavaScript 함수도 사용한다는 것을 알게 될 것입니다 Number
). 누군가 '1x'
입력하면 마치 마치 마치 입력 한 것처럼 처리하는 것보다 오류를 표시하는 것을 선호합니다 '1'
. 나는 경우가있는 숫자에 스타일을 변환하고 때 정말 예외를 만들 수있는 유일한 시간입니다 parseFloat
스타일과 같은 형태로 제공하기 때문에 도움이 될 것입니다 '3px'
경우에 나는 드롭 할, 'px'
일부 단지를 얻을 3
내가 찾을 수 있도록 parseFloat
도움 여기. 그러나 실제로 당신이 선택한 것은 당신에게 달려 있으며 어떤 형태의 입력을 받아들이고 싶습니까?
단항 +
연산자를 사용 Number
하는 것은 함수 로 사용하는 것과 정확히 같습니다.
Number('0x10'); // => 16
+'0x10'; // => 16
Number('10x'); // => NaN
+'10x'; // => NaN
Number('40'); // => 40
+'40'; // => 40
그래서 나는 보통 +
짧게 사용 합니다. 당신이 무엇을하는지 아는 한, 쉽게 읽을 수 있습니다.
Number()
"이상한"것으로 간주하지 않을 것이며, 더 기대되는 것으로 간주하고 공백은 빈 값이지만 null / undefined가 아닙니다 => 0은 좋은 결과입니다. 어쨌든 쇼케이스를위한 큰 (+) :)
Number('Infinity') === Infinity
반면에parseInt('Infinity') === NaN
+
이전 행에서 세미콜론을 잊어 버린 경우 추가 표현식이 대신 평가 될 수 있으므로 (단일 더하기)를 사용하지 않습니다 .
입력이 "적절한 숫자"가 아닌 경우 차이점이 발생합니다. "가능한 한"구문 분석 하는 동안 Number
리턴합니다 . 빈 문자열에서 호출하는 경우 반환 에서는 parseFloat 반환하면서 .NaN
parseFloat
Number
0
NaN
예를 들면 다음과 같습니다.
Number("") === 0 // also holds for false
isNaN(parseFloat("")) === true // and null
isNaN(Number("32f")) === true
parseFloat("32f") === 32
NaN != NaN
하지만
NaN != NaN
평가되는 의견 -팁 주셔서 감사합니다!
isNaN(NaN)
반환true
이 예제에서 차이점을 볼 수 있습니다.
Number('') = 0;
Number(false) = 0;
Number('1a') = NaN;
parseFloat('') = NaN;
parseFloat(false) = NaN;
parseFloat('1a') = 1;
parseFloat는 문자열에서 숫자의 첫 번째 모양을 검색하기 때문에 약간 느립니다. 반면 Number 구성자는 공백이있는 숫자 값이 포함되거나 false 값이 포함 된 문자열에서 새 숫자 인스턴스를 만듭니다.
추신 일부 범용 유형 변환 솔루션에 관심이 있다면 내 블로그에서 유형 변환에 대한 게시물을 읽을 수 있습니다. http://justsimplejs.blogspot.com/2012/08/data-type-conversion.html
빈 문자열의 경우에는 다릅니다.
+""
그리고 Number("")
0을 반환, 동안 parseFloat("")
반환 NaN가.
parseFloat()
빈 문자열이 올바른 결과가 아닌 숫자 0
(읽기 : NaN)가 아니라 문자 "0"
가 있는 문자열은 IS 0
라고 말할 수 있습니다 .
+x
반환 0
빈 문자열뿐만 아니라 공백 전용 문자열뿐만 아닙니다. 예를 들면 : +" "
, +"\t\t\t"
, +"\n\n"
- 그들 모두 제공 0
결과로
내가 아는 한, 이것은 동료들로부터 만 들었으므로 완전히 알려지지 않았을 수 있습니다. parseFloat는 조금 더 빠릅니다.
추가 연구가 진행되었지만이 성능 차이는 브라우저에 따라 다릅니다.
http://jsperf.com/parseint-vs-parsefloat/6
이 jsPerf 결과를보고 전화하십시오. (+ x 테스트도 포함)
의 '@xdazz에서 언급 한 바와 같이 대답 +""
하고 Number("")
복귀 0
하면서 parseFloat("")
반환 NaN
빈 문자열이 숫자 0을 의미하지 않기 때문에 그래서 다시 내가에서는 parseFloat와 함께 갈 것은, 문자 만 문자열 "0"
은 0을 의미에;
parseFloat()
여전히 승자입니다.