[javascript] JavaScript에서 문자열로 캐스트

StringJavaScript에서 변수를 캐스팅하는 세 가지 방법을 찾았습니다 .
jQuery 소스 코드에서 이러한 세 가지 옵션을 검색했으며 모두 사용 중 입니다.
그들 사이에 차이점이 있는지 알고 싶습니다.

value.toString()
String(value)
value + ""

데모

그들은 모두 같은 결과물을 생산하지만 그중 하나가 다른 것보다 낫습니까?
나는 + ""문자가 절약된다는 장점이 있지만 그다지 큰 이점은 아닙니다.



답변

(가) 때 그들은 다르게 행동 할 value것입니다 null.

  • null.toString()오류 발생 -null의 ‘toString’메소드를 호출 할 수 없음
  • String(null)반환 값- “널”
  • null + ""또한 “널”을 리턴합니다.

valueis 인 경우 매우 유사한 동작이 발생합니다 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

http://jsfiddle.net/f8YwA/


답변

그것들은 동일하게 동작하지만 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()
  • '' + vv.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 는 말합니다.