답변

18

예. 일반적으로 리터럴 문자열, 식별자 또는 JS 소스의 다른 상수 문자열은 사용하지 않습니다. 그러나 구현 세부 사항 (정확하게 예를 들어 구금되어있는 것)은 다양하며 인터내셔널이 발생할 때도 다양합니다.

문자열 값은 String 개체와 같지 않습니다. 그러나 String 개체는 근본적으로 잘못된 동작이므로 인턴 된 것이 아닙니다.

+3

안녕 @olliej, 명세서에 대한 모든 소스가있다? –

+3

@FelipeSabino 주요 엔진에서 작동하고 ecmascript위원회에 참여 했습니까? ;) 더 심각하게 당신은 JavaScriptCore, SpiderMonkey, V8 등 온라인 소스를 볼 수 있습니다. – olliej

+5

물론 오픈 소스 코드를 살펴보고 직접 확인해 볼 수도 있습니다.하지만 그 이유 중 하나는 이런 번거 로움을 피하는 것입니다. 지식을 의심하는 것이 아니라 개발자가 연구에 도움을주는 것입니다. 당신은 주제에 대해 많이 알고있는 사람이고,이 주제에 관해 더 많은 것을 배우는 데 도움이 될 수있는 훨씬 더 믿을만한 참조가있는 것 같습니다. 예를 든다면, "일반적인 문자열은 인턴입니다"라고했는데, 그렇지 않은 경우는 무엇입니까? 등등. –

10

http://jsperf.com/strinterning

크롬에서 예, 아니오 오로라 (15)과 FF (13)에! 두 문자열을 비교하는 것은 Firefox에서 두 개의 포인터를 비교하는 것보다 85 % 느립니다. 그러나 Chrome에서 속도가 같아서 두 개의 포인터를 비교한다는 표시입니다.

어쩌면 모질라에서 JS 엔진 팀은 자신의 코드를 확인해야합니다

...

+4

만약 당신이 나쁜 생각, IE9조차 포인터 비교를 [때 문자열 변수를 비교할 때 * 자체 *] (http://www.kpozin.net/archive/2011/05/ie9 문자열 평등). ([관련 JSPerfs] (http://jsperf.com/string-comparison1/3).) – kpozin

관련 문제