JavaScript에는 스트링빌더 클래스가 내장되어 있습니까?
하지만 JavaScript에는 정기적으로 구현이 있습니까?
Internet Explorer용 코드를 작성해야 할 경우 어레이 조인을 사용하는 구현을 선택해야 합니다.스트링과 를 연결하다+
또는+=
오퍼레이터가 IE에서 매우 느립니다.이것은 특히 IE6에 해당됩니다.최신 브라우저+=
일반적으로 어레이 결합과 같은 속도입니다.
많은 문자열 연결을 수행해야 할 경우 일반적으로 어레이를 채우고 문자열 빌더 클래스를 사용하지 않습니다.
var html = [];
html.push(
"<html>",
"<body>",
"bla bla bla",
"</body>",
"</html>"
);
return html.join("");
주의:push
메서드는 여러 인수를 받아들입니다.
방금 http://jsperf.com/javascript-concat-vs-join/2에서 공연을 다시 확인했어요.테스트 케이스는 알파벳을 1,000번 연결하거나 결합합니다.
현재 브라우저(FF, Opera, IE11, Chrome)에서는 "concat"이 "join"보다 약 4-10배 더 빠릅니다.
IE8에서는, 양쪽 모두 거의 같은 결과를 반환합니다.
IE7에서는 안타깝게도 가입이 약 100배 빨라집니다.
아니요, 문자열 작성에 대한 기본 지원은 없습니다.대신 연결을 사용해야 합니다.
물론 스트링의 다른 부분을 배열하여 호출할 수 있습니다.join()
그 배열에 따라 다르지만, 사용 중인 JavaScript 인터프리터에서 조인이 어떻게 구현되는지에 따라 달라집니다.
나는 그것의 속도를 비교하기 위한 실험을 했다.str1+str2
메서드 vsarray.push(str1, str2).join()
방법.코드는 간단했습니다.
var iIterations =800000;
var d1 = (new Date()).valueOf();
str1 = "";
for (var i = 0; i<iIterations; i++)
str1 = str1 + Math.random().toString();
var d2 = (new Date()).valueOf();
log("Time (strings): " + (d2-d1));
var d3 = (new Date()).valueOf();
arr1 = [];
for (var i = 0; i<iIterations; i++)
arr1.push(Math.random().toString());
var str2 = arr1.join("");
var d4 = (new Date()).valueOf();
log("Time (arrays): " + (d4-d3));
Internet Explorer 8과 Firefox 3.5.5에서 모두 Windows 7 x 64로 테스트했습니다.
처음에는 적은 횟수(몇 백 개, 몇 천 개)로 테스트했습니다.결과는 예측할 수 없었습니다(문자열 연결에 0밀리초, 어레이 가입에 16밀리초가 걸리는 경우도 있었습니다).
카운트를 50,000으로 늘렸을 때 결과는 브라우저마다 달랐습니다.Internet Explorer에서는 문자열 연결 속도가 더 빨랐고(94밀리초), 조인 속도가 더 느렸습니다(125밀리초), Firefox에서는 어레이 결합 속도가 더 빨랐습니다(113밀리초).
그리고 50만 개로 늘렸습니다.자, 이제.array.join()
두 브라우저 모두에서 문자열 연결보다 느렸습니다.문자열 연결은 Internet Explorer에서 937밀리초, Firefox에서 1155밀리초, Internet Explorer에서 어레이 조인 1265밀리초, Firefox에서 1207밀리초였습니다.
Internet Explorer에서 "스크립트를 실행하는 데 시간이 너무 오래 걸립니다"를 사용하지 않고 테스트할 수 있는 최대 반복 횟수는 850,000회였습니다.그 후 Internet Explorer는 문자열 연결용으로 1593개, 어레이 연결용으로 2046개, Firefox는 문자열 연결용으로 2101개, 어레이 연결용으로 2249개였습니다.
결과 - 반복 횟수가 적은 경우 다음을 사용할 수 있습니다.array.join()
파이어폭스에서 더 빠를 수 있습니다.가 증가하면, 「」가 .string1+string2
방법이 더 빠릅니다.
갱신하다
Internet Explorer 6(Windows XP)에서 테스트를 실행했다.테스트를 10만 번 이상 반복해도 프로세스가 즉시 중지되어 종료되지 않았습니다.40,000회 반복한 결과는 다음과 같습니다.
Time (strings): 59175 ms
Time (arrays): 220 ms
6을 하려면 [ ]를 선택합니다.Internet Explorer 6을 선택합니다.array.join()
문자열 연결보다 훨씬 빠릅니다.
그 코드는 몇 가지 변경을 가하여 원하는 경로처럼 보입니다.
추가 방법을 다음과 같이 변경해야 합니다.0을 숫자 0을 .this
추가 정보를 연결할 수 있습니다.
StringBuilder.prototype.append = function (value) {
if (value || value === 0) {
this.strings.push(value);
}
return this;
}
편집
아니요, 기본 제공 클래스는 없습니다. ★★★★★★★★★★★★★★.string literals
을 사용하다
원래의 회답
ECMAScript 6 버전(ECMAScript 2015라고도 함)에서는 문자열 리터럴이 도입되었습니다.
var classType = "stringbuilder";
var q = `Does JavaScript have a built-in ${classType} class?`;
작은 따옴표 대신 back-ticks가 문자열을 둘러싼다는 점에 유의하십시오.
다음 함수를 정의했습니다.
function format() {
var args = arguments;
if (args.length <= 1) {
return args;
}
var result = args[0];
for (var i = 1; i < args.length; i++) {
result = result.replace(new RegExp("\\{" + (i - 1) + "\\}", "g"), args[i]);
}
return result;
}
c#과 같이 호출할 수 있습니다.
var text = format("hello {0}, your age is {1}.", "John", 29);
결과:
안녕 존, 너의 나이는 29살이야.
JavaScript용 String Builder를 사용해 보십시오.
function StringBuilder(value) {
this.strings = new Array();
this.append(value);
}
StringBuilder.prototype.append = function (value) {
if (value) {
this.strings.push(value);
}
}
StringBuilder.prototype.clear = function () {
this.strings.length = 0;
}
StringBuilder.prototype.toString = function () {
return this.strings.join("");
}
var sb = new StringBuilder();
sb.append("This is");
sb.append("much better looking");
sb.append("than using +=");
var myString = sb.toString();
sb.clear();
다음은 Typescript의 String Builder 클래스의 간단한 예입니다.
export class StringBuilder {
private _lines: string[] = [];
write(line: string = ""): void {
this._lines.push(line);
}
writeln(line: string = ""): void {
this._lines.push(line);
this._lines.push("\n");
}
toString(): string {
return this._lines.join("");
}
}
다음과 같이 사용할 수 있습니다.
const sb = new StringBuilder();
sb.write("Hello World");
sb.writeln("!");
console.log(sb.toString());
어레이를 기동할 수 있는 방법을 소개합니다.참가:
var arrayOfStrings = ['foo', 'bar'];
var result = String.concat.apply(null, arrayOfStrings);
console.log(result);
예상대로 출력은 문자열 'foobar'입니다.파이어폭스에서는, 이 어프로치가 어레이를 웃돌고 있습니다.결합은 + 연결보다 성능이 우수합니다.String.concat에서는 각 세그먼트를 별도의 인수로 지정해야 하므로 발신자는 실행 중인 JavaScript 엔진에 의해 부과되는 인수 수 제한에 의해 제한됩니다.자세한 내용은 Function.protype.apply() 문서를 참조하십시오.
JavaScript에서 많은 문자열 연결을 하고 있는 나를 발견하면, 나는 템플리트를 찾기 시작한다.Handlebars.js는 HTML과 JavaScript의 가독성을 유지하는데 매우 적합합니다.http://handlebarsjs.com
C#에서는 다음과 같은 작업을 수행할 수 있습니다.
String.Format("hello {0}, your age is {1}.", "John", 29)
JavaScript에서는 다음과 같은 작업을 수행할 수 있습니다.
var x = "hello {0}, your age is {1}";
x = x.replace(/\{0\}/g, "John");
x = x.replace(/\{1\}/g, 29);
는 요?sys.StringBuilder()
음음 츠키
https://msdn.microsoft.com/en-us/library/bb310852.aspx
언급URL : https://stackoverflow.com/questions/2087522/does-javascript-have-a-built-in-stringbuilder-class
'source' 카테고리의 다른 글
객체 속성에 직접 할당된 호출 종료 (0) | 2022.12.05 |
---|---|
Python에서 같은 줄에 여러 개의 인쇄물 (0) | 2022.12.05 |
요소가 jQuery에 숨겨져 있는지 확인하려면 어떻게 해야 합니까? (0) | 2022.12.05 |
PHP를 사용하여 여러 MariaDB 쿼리를 실행할 수 없습니다. (0) | 2022.12.05 |
설명: MariaDB에서 MySQL로 이행한 후 "DEPEND SUBQUERY"가 표시되며 매우 느림 (0) | 2022.12.05 |