답변:
이처럼 :
var foo = 45;
var bar = '' + foo;
사실, 간단한 편의를 위해 일반적으로 이와 같이 수행하더라도 원시 속도에 대해 1,000 회 이상의 반복 이 장점이 있습니다..toString()
참조 성능 (내게로하지,하지만 난 내 자신을 작성 갔을 때 발견) 여기에 테스트 : http://jsben.ch/#/ghQYR
위의 JSPerf 테스트를 기반으로 가장 빠릅니다. str = num.toString();
속도 차이 는 0.1 초에 100 만 번 변환 할 수 있다고 생각할 때 속도 차이가 크게 중요하지 않다는 점에 유의해야합니다 .
업데이트 : 브라우저마다 속도가 크게 다른 것 같습니다. Chrome num + ''
에서이 테스트를 기반으로 가장 빠른 것 같습니다 http://jsben.ch/#/ghQYR
업데이트 2 : 위의 테스트를 기반으로 Firefox 20.0.1은 샘플 .toString()
보다 약 100 배 느리게 실행 '' + num
됩니다.
null foo
오류가 발생하지 않기 때문에이 답변을 좋아합니다 .
내 의견으로 n.toString()
는 그 명료 함을 위해 상을 받는다. 나는 그것이 더 많은 오버 헤드를 가지고 있다고 생각하지 않는다.
null
, undefined
)이 대답 작동하지 않는 거의가 "안전하지 않은"하지 않습니다.
null
또는 undefined
이 응용 프로그램의 특정이기 때문에, 내가 상상하는 동안 (n || defaultNumber).toString()
대부분의 사람들이 난 강력하게 우리가 질문으로 작업해야합니다 동의하지 이러한 상황에서 원하는 것 인 것이다. 이것은 숫자를 문자열로 변환하는 것과, 필요한 경우 별도의 수업이 필요한 훌륭한 아키텍처 및 기타 유형 변환에 관한 것입니다.
언어에 익숙하지 않은 사람에게는 명백한 변환이 매우 분명합니다. 다른 사람들이 제안한 것처럼 유형 강제 변환을 사용하면 개발자가 강제 규칙을 모르는 경우 모호성이 생깁니다. 궁극적으로 개발자 시간은 CPU 시간보다 비싸므로 후자의 비용으로 전자에 맞게 최적화합니다. 즉,이 경우 차이는 무시할 수 있지만 확실하지 않은 경우 이러한 종류의 것들을 최적화하는 괜찮은 JavaScript 압축기가 있습니다.
위의 이유로 나는 다음과 같이 갈 것입니다 : n.toString()
또는 String(n)
. null이거나 정의되지 않은 String(n)
경우 실패하지 않기 때문에 아마도 더 나은 선택 일 것 n
입니다.
null
, 또는 undefined
. 경우 n
이다 null
나 undefined
때문에 내 프로그램의 버그에, 나는 내 프로그램이 나에게 찾아 버그를 수정의 더 나은 기회를주고,이 상태에서 실패를 원합니다. 프로그램 충돌은 프로그래머가 버그를 찾는 데 도움이되는 선물입니다 :-). 대안은 버그에 대해주의 깊게 빛나면서 설계된대로 작동하지 않는 소프트웨어를 제공하는 것입니다. 그래서 나는 String(n)
오류를 가리기 위해 사용하는 팬이 아닙니다 .
String(n)
기능 스타일로 사용하기에 좋습니다 (예 : 밑줄의 결합) _.compose(funcThatNeedsAStringParam, String)
.
다른 답변은 이미 다른 옵션을 다루었지만이 방법을 선호합니다.
s = `${n}`
간결하고 간결하며 이미 다른 많은 장소에서 사용되었으므로 (현대 프레임 워크 / ES 버전을 사용하는 경우) 프로그래머가 이해할 수있는 안전한 방법입니다.
n.toString()
습니까?
n
이다 undefined
그것을 사용하여 구문 오류가 발생합니다.toString()
String(n)
모든 경우 와 동일한 결과를 제공하지는 않습니까? 유일한 차이점은 덜 명확하다는 것입니다.
변수를 문자열로 변환하는 가장 간단한 방법은 해당 변수에 빈 문자열을 추가하는 것입니다.
5.41 + '' // Result: the string '5.41'
Math.PI + '' // Result: the string '3.141592653589793'
(5.41 + '')
문자열과 같은 방법을 사용하는 .substring()
등
내가 사용 https://jsperf.com를 다음과 같은 경우에 대한 테스트 케이스를 만들 수 :
number + ''
`${number}`
String(number)
number.toString()
https://jsperf.com/number-string-conversion-speed-comparison
2018 년 7 월 24 일 현재 결과 number + ''
는 템플릿 문자열 리터럴과 연결된 Firefox에서 Chrome에서 가장 빠릅니다.
둘 다 String(number)
및 number.toString()
가장 빠른 옵션보다 약 95 % 느립니다.
유일한 유효 솔루션 거의 모든 가능한 기존 및 향후의 경우 (입력, 널 (null)이 정의되지 않은, 기호 다른, 아무것도 번호)입니다 String(x)
. "여기서는 반드시 숫자를 문자열로 변환하고 여기에서 반드시 부울을 문자열로 변환"과 같은 값 유형 가정을 기반으로 간단한 조작에 3 가지 방법을 사용하지 마십시오.
설명:
String(x)
null, undefined, Symbols, [anything]을 처리하고 .toString()
객체를 호출 합니다.
'' + x
.valueOf()
x에 대한 호출 (번호로 캐스트), 심볼에 대한 호출 은 구현에 따른 결과를 제공 할 수 있습니다.
x.toString()
널을 던지고 정의되지 않습니다.
참고 : String(x)
와 같은 프로토 타입이없는 객체에서는 여전히 실패합니다 Object.create(null)
.
'Hello, undefined'와 같은 문자열이 마음에 들지 않거나 프로토 타입이없는 객체를 지원하려면 다음 유형 변환 함수를 사용하십시오.
/**
* Safely casts any value to string. Null and undefined are converted to ''.
* @param {*} value
* @return {string}
*/
function string (str) {
return value == null ? '' : (typeof value === 'object' && !value.toString ? '[object]' : String(value));
}
다음은 JS에서 정수를 문자열로 변환하는 방법입니다
방법은 성능의 내림차순으로 정렬됩니다.
(성능 테스트 결과는 @DarckBlezzer가 그의 답변으로 제공합니다)
var num = 1
방법 1 :
num =`$ {num}`
방법 2 :
num = num + ''
방법 3 :
num = 문자열 (num)
방법 4 :
num = num.toString ()
참고 : 숫자에서 직접 tostring ()을 호출 할 수 없습니다
예 : 2.toString ()에서 Uncaught SyntaxError가 발생 함 : 유효하지 않거나 예상치 못한 토큰
어느 것이 가장 성능이 좋은지 궁금하다면 다른 숫자-> 문자열 변환을 비교하는 곳을 확인하십시오.
외모가 좋아하는 2+''
또는 2+""
가장 빠른입니다.
시간이있을 때 더 많은 데이터로 이것을 다시 편집 할 것입니다. 지금은 괜찮습니다 ...
NodeJS v8.11.2에서 테스트 : 2018/06/06
let i=0;
console.time("test1")
for(;i<10000000;i=i+1){
const string = "" + 1234;
}
console.timeEnd("test1")
i=0;
console.time("test1.1")
for(;i<10000000;i=i+1){
const string = '' + 1234;
}
console.timeEnd("test1.1")
i=0;
console.time("test1.2")
for(;i<10000000;i=i+1){
const string = `` + 1234;
}
console.timeEnd("test1.2")
i=0;
console.time("test1.3")
for(;i<10000000;i=i+1){
const string = 1234 + '';
}
console.timeEnd("test1.3")
i=0;
console.time("test2")
for(;i<10000000;i=i+1){
const string = (1234).toString();
}
console.timeEnd("test2")
i=0;
console.time("test3")
for(;i<10000000;i=i+1){
const string = String(1234);
}
console.timeEnd("test3")
i=0;
console.time("test4")
for(;i<10000000;i=i+1){
const string = `${1234}`;
}
console.timeEnd("test4")
i=0;
console.time("test5")
for(;i<10000000;i=i+1){
const string = 1234..toString();
}
console.timeEnd("test5")
i=0;
console.time("test6")
for(;i<10000000;i=i+1){
const string = 1234 .toString();
}
console.timeEnd("test6")
산출
test1: 72.268ms
test1.1: 61.086ms
test1.2: 66.854ms
test1.3: 63.698ms
test2: 207.912ms
test3: 81.987ms
test4: 59.752ms
test5: 213.136ms
test6: 204.869ms
node.js를 사용할 때 비슷한 결과가 나타납니다. 이 스크립트를 실행했습니다.
let bar;
let foo = ["45","foo"];
console.time('string concat testing');
for (let i = 0; i < 10000000; i++) {
bar = "" + foo;
}
console.timeEnd('string concat testing');
console.time("string obj testing");
for (let i = 0; i < 10000000; i++) {
bar = String(foo);
}
console.timeEnd("string obj testing");
console.time("string both");
for (let i = 0; i < 10000000; i++) {
bar = "" + foo + "";
}
console.timeEnd("string both");
다음과 같은 결과를 얻었습니다.
❯ node testing.js
string concat testing: 2802.542ms
string obj testing: 3374.530ms
string both: 2660.023ms
내가 그것을 실행할 때마다 비슷한 시간.
'' + 123e-50
returns"1.23e-48"
.