>  기사  >  웹 프론트엔드  >  javascript_javascript 스킬의 문자열 연결에 대한 자세한 설명

javascript_javascript 스킬의 문자열 연결에 대한 자세한 설명

WBOY
WBOY원래의
2016-05-16 16:35:121164검색

최근 "자바스크립트 고급 프로그래밍"을 공부하면서 문자열의 특성에 대한 설명이 있었습니다. 원문은 대략 다음과 같습니다. ECMAScript의 문자열은 불변입니다. 즉, 문자열이 생성되면 그 값은 ​​​​변경할 수 없습니다. 변수에 저장된 문자열을 변경하려면 먼저 원래 문자열을 삭제한 다음 새 값이 포함된 다른 문자열로 변수를 채웁니다. 예:

코드 복사 코드는 다음과 같습니다.

var lang = "자바";
lang = lang "스크립트";

이 작업을 구현하는 과정은 다음과 같습니다. 먼저 10자를 포함할 수 있는 새 문자열을 만든 다음 이 문자열을 "Java" 및 "Script"로 채우고 마지막 단계는 원래 문자열 "Java"를 삭제하는 것입니다. 및 "스크립트". 이 두 문자열은 더 이상 유용하지 않기 때문입니다. 그러나 낮은 버전의 브라우저(예: IE6)에서는 문자열 연결 속도가 성능을 많이 소모하는 프로세스입니다.

Java의 문자열 메커니즘은 js와 유사합니다(즉, 일단 생성되면 변경할 수 없으며 변경하려는 경우에만 원래 값을 삭제할 수 있습니다). 문자열이 불가능한 문제를 해결하기 위해 StringBuffer가 있습니다. 문제는 js에 비슷한 방법이 없다는 것입니다. 하지만 우리는 이 버퍼링 메커니즘을 시뮬레이션할 수 있습니다. 스플라이싱에는 배열을 사용하는 것이 원칙입니다.

코드 복사 코드는 다음과 같습니다.

함수 StringBuffer() {
This.__strings__ = new Array();
}
StringBuffer.prototype.append = 함수(str) {
This.__strings__.push(str);
이것을 반환; //편리한 체인 작업
}
StringBuffer.prototype.toString = 함수 () {
return this.__strings__.join("");
}

/*테스트*/
var buffer = new StringBuffer();
buffer.append("안녕하세요 ").append("javascript");

var 결과 = buffer.toString();
경고(결과)

ps: 요지 주소는 다음과 같습니다. https://gist.github.com/hehongwei44/fe71f10e4d2d9295aeab

메커니즘을 시뮬레이션했지만 이 방법의 성능은 문자열 접합과 얼마나 다른가요? 테스트 코드는 다음과 같습니다.

코드 복사 코드는 다음과 같습니다.

var d1 = 새로운 날짜();
var str = "";
for(var i = 0; i str = "텍스트";
}
var d2 = new Date();
document.write("한 번의 비용 테스트: " (d2.getTime() - d1.getTime())/1000 "초" "
");

var oBuffer = new StringBuffer();
d3 = 새 날짜();
for(var i = 0; i oBuffer.append("텍스트 ");
}
var sResult = oBuffer.toString();
d4 = 새 날짜();
document.write("테스트 2 비용: " (d4.getTime() - d3.getTime())/1000 "초");

테스트 결과는 다음과 같습니다. (테스트 결과는 환경에 따라 다를 수 있습니다.)

1. 1000회 비교를 기준으로 하면 두 실행이 매우 빠르며(기본적으로 몇 밀리초) 소요 시간도 후자와 전자의 차이가 10밀리초를 넘지 않습니다.
2. 10,000회를 기준으로 실행 결과는 위와 유사하지만 IE6에서는 전자의 통화료가 더 많이 발생합니다.
3. 기본으로 100,000번을 사용하면 문자열 접합은 IE6에서 분명히 더 많은 시간이 걸립니다. 다른 브라우저도 크게 다르지 않으며 일부는 StringBuffer보다 짧습니다.

결론

1. 이어진 단어 수가 1,000번 미만인 경우 전자를 과감하게 사용합니다. 일반적으로 우리는 이어진 단어 수가 수천 번인 상황을 거의 접하지 않습니다.
2. 다른 브라우저는 스플라이싱에 대한 성능 문제가 없으며 주로 IE6입니다. 스플라이싱 수가 수만 또는 수십만이면 IE6 전용 StringBuffer 시뮬레이션을 사용하는 것이 좋습니다.

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.