문자열 리터럴 (큰 따옴표 또는 작은 따옴표로 표시됨)과 비 생성자 컨텍스트 (즉, 새 키워드를 사용하지 않음)에서 문자열 호출에서 반환 된 문자열은 기본 문자열입니다. 자바 스크립트는 자동으로 프리미티브를 String 객체로 변환하므로 프리미티브 문자열에 String 객체 메소드를 사용할 수 있습니다. 메서드가 기본 문자열에서 호출되거나 속성 조회가 발생하는 컨텍스트에서 JavaScript는 자동으로 문자열 기본 형식을 래핑하고 메서드를 호출하거나 속성 조회를 수행합니다.
그래서 문자열 프리미티브에 대한 (논리적으로) 연산 (메소드 호출)은 문자열 method에 적용 되기 전에 문자열 객체 (추가 작업)로 변환되기 때문에 문자열 객체에 대한 연산보다 느려 야한다고 생각했습니다 .
그러나이 테스트 케이스 에서는 결과가 반대입니다. 코드 블록-1 빠른 것보다 실행 코드 블록 2는 모두 코드 블록 아래에서 언급 :
코드 블록 -1 :
var s = '0123456789';
for (var i = 0; i < s.length; i++) {
s.charAt(i);
}
코드 블록 -2 :
var s = new String('0123456789');
for (var i = 0; i < s.length; i++) {
s.charAt(i);
}
결과는 브라우저마다 다르지만 코드 블록 -1 은 항상 더 빠릅니다. 누구든지 이것을 설명해 주시겠습니까? 왜 코드 블록 -1 이 코드 블록 -2 보다 빠릅니다 .
'0123456789'.charAt(i)?
code block-1더 빠른지 묻습니다 .
new String의 또 다른 투명 레이어가 도입 됩니다.typeof new String(); //"object"