2014-06-05 3 views
0

Whats dif. 두 가지 방법 사이 :String()과 + ''사이의 타입 변환. 차이

null+''; 
"null" 
undefined + '' 
"undefined" 
NaN + '' 
"NaN" 
String(undefined) 
"undefined" 
String(null) 
"null" 

염두에 두어야 할 기능이 있습니까? 어쩌면 그들은 완전히 동일하고 성능이 있습니까?

+2

결과는 동일합니다. 성능에 대해 알고 싶다면 jsperf를 사용하십시오. – Barmar

답변

1

모든 예제에서 두 번째 방법은 문자열 리터럴을 사용하여 문자열을 만드는 것입니다. 다음과 같은 경우에

null + '' 
undefined + '' 
NaN + '' 

문자열과 연결되므로 이전 객체도 해당 문자열 표현으로 변환됩니다. 다음과 같은 표현에서

String(undefined) 
String(null) 

String 생성자는 객체의 문자열 표현을 구성하는 데 사용됩니다. 내부적으로 String(undefined)undefined + ''은 동일한 기능을 사용하여 문자열 표현으로 변환합니다.

다른 방법은 런타임에 문자열 값을 결정하지만 JavaScript 구현은 컴파일 시간 동안 문자열 리터럴을 이해할 수 있기 때문에 단일 문자열 리터럴을 사용하면 다른 메서드보다 약간의 성능 이점을 얻을 수 있습니다.

1

그들은 모두 같은 값인 false-y 값의 문자열 표현을 반환합니다.

그러나 성능은 크게 다를 수 있습니다. String()undefinednull에 대한보다 효율적인 반면

http://jsperf.com/converting-null-undefined-nan-to-string

예를 들어, 크롬과 파이어 폭스의 최신 버전 (시험 시간에 35.0과 28.0 각각), String(NaN)보다 훨씬 더 효율적으로 NaN + ''을 처리합니다. 사파리 7.0은 덜 신경 쓸 수 없었다.

보다 일반적인 경우 (예 : NumberString으로 변환) 빈 문자열을 연결하여 새로운 객체를 생성하는 대 .toString() 대가 당분간 논쟁의 대상이되었습니다. 결과는 흥미 롭습니다.

http://jsperf.com/string-vs-tostring-vs-empty-string-value/2

마일리지는 브라우저 버전에 따라 크게 달라질 수 있습니다. 또한 미숙 한 최적화를 수행 할 때 가장 성능에 민감한 환경에서 가장 명확한 것은 무엇이든 할 수 있습니다. 그리고 예기치 않은 유형 강요에주의하십시오. 특히 false-y 값을 확인할 때주의하십시오.