String
JavaScript에서 변수를 캐스팅하는 세 가지 방법을 찾았습니다 .
jQuery 소스 코드에서 이러한 세 가지 옵션을 검색했으며 모두 사용 중 입니다.
그들 사이에 차이점이 있는지 알고 싶습니다.
value.toString()
String(value)
value + ""
그들은 모두 같은 결과물을 생산하지만 그중 하나가 다른 것보다 낫습니까?
나는 + ""
문자가 절약된다는 장점이 있지만 그다지 큰 이점은 아닙니다.
답변
(가) 때 그들은 다르게 행동 할 value
것입니다 null
.
null.toString()
오류 발생 -null의 ‘toString’메소드를 호출 할 수 없음String(null)
반환 값- “널”null + ""
또한 “널”을 리턴합니다.
value
is 인 경우 매우 유사한 동작이 발생합니다 undefined
( jbabey의 답변 참조 ).
그 외에는 무시할만한 성능 차이가 있습니다. 큰 루프에서 사용하지 않는 한 걱정할 가치가 없습니다.
답변
차이점이 있지만 질문과 관련이 없을 수도 있습니다. 예를 들어, toString 프로토 타입은 정의되지 않은 변수에 존재하지 않지만 다른 두 가지 방법을 사용하여 undefined를 문자열로 캐스트 할 수 있습니다.
var foo;
var myString1 = String(foo); // "undefined" as a string
var myString2 = foo + ''; // "undefined" as a string
var myString3 = foo.toString(); // throws an exception
답변
그것들은 동일하게 동작하지만 toString
숫자 이진수, 8 진수 또는 16 진수 문자열을 변환하는 방법을 제공합니다 :
예:
var a = (50274).toString(16) // "c462"
var b = (76).toString(8) // "114"
var c = (7623).toString(36) // "5vr"
var d = (100).toString(2) // "1100100"
답변
이 JSPerf 테스트 에 따르면 속도가 다릅니다. 그러나 대량으로 사용하지 않는 한 잘 수행해야합니다.
완전성을 위해 : asawyer가 이미 언급 했듯이이.toString()
방법 을 사용할 수도 있습니다 .
답변
위의 모든 것 외에도 정의 된 값에 대해 다음을 알아야합니다 v
.
String(v)
전화v.toString()
'' + v
v.valueOf()
다른 유형 캐스트 이전의 통화
따라서 다음과 같은 작업을 수행 할 수 있습니다.
var mixin = {
valueOf: function () { return false },
toString: function () { return 'true' }
};
mixin === false; // false
mixin == false; // true
'' + mixin; // "false"
String(mixin) // "true"
FF 34.0 및 노드 0.10에서 테스트
답변
null, undefined, NaN, 0 및 false로 OK이면 모두 ”로 캐스팅하는 (s ? s+'' : '')
것이 더 빠릅니다.
http://jsperf.com/cast-to-string/8 참조
참고-현재 브라우저마다 큰 차이가 있습니다.
답변
실제 예 : 임의의 수의 매개 변수로 호출 할 수있는 로그 함수가 있습니다 log("foo is {} and bar is {}", param1, param2)
. 경우 DEBUG
플래그로 설정 true
, 괄호는 지정된 파라미터로 대체 취득하고, 문자열이 전달됩니다 console.log(msg)
. 매개 변수는 문자열, 숫자 및 JSON / AJAX 호출에 의해 반환 될 수있는 것 null
입니다.
arguments[i].toString()
가능한null
값으로 인해 옵션이 아닙니다 (Connell Watkins 답변 참조)- JSLint는 다음에 대해 불평합니다
arguments[i] + ""
입니다. 이것은 무엇을 사용해야할지 결정에 영향을 줄 수도 있고 그렇지 않을 수도 있습니다. 일부 사람들은 JSLint를 엄격하게 준수합니다. - 일부 브라우저에서는 빈 문자열을 연결하는 것이 문자열 함수 또는 문자열 생성자를 사용하는 것보다 약간 빠릅니다 (Sammys S. 답변의 JSPerf 테스트 참조). Opera 12와 Firefox 19에서 빈 문자열을 연결하는 것은 엄청나게 빠릅니다 (Firefox 19에서는 95 %) . 또는 적어도 JSPerf 는 말합니다.