91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

溫故知新——JavaScript中的字符串連接問題最全總結(推薦)

發布時間:2020-09-09 13:41:50 來源:腳本之家 閱讀:126 作者:momomini 欄目:web開發

ECMAScript 中最常見的一個問題是字符串連接的性能。與其他語言類似,ECMAScript 的字符串是不可變的,即它們的值不能改變。請考慮下面的代碼:

var str = "hello ";
str += "world";

實際上,這段代碼在幕后執行的步驟如下:

1、創建存儲 "hello " 的字符串。
2、創建存儲 "world" 的字符串。
3、創建存儲連接結果的字符串。
4、把 str 的當前內容復制到結果中。
5、把 "world" 復制到結果中。
6、更新 str,使它指向結果。

每次完成字符串連接都會執行步驟 2 到 6,使得這種操作非常消耗資源。如果重復這一過程幾百次,甚至幾千次,就會造成性能問題。解決方法是用 Array 對象存儲字符串,然后用 join() 方法(參數是空字符串)創建最后的字符串。想象用下面的代碼代替前面的代碼:

var arr = new Array();
arr[0] = "hello ";
arr[1] = "world";
var str = arr.join("");

這樣,無論數組中引入多少字符串都不成問題,因為只在調用 join() 方法時才會發生連接操作。此時,執行的步驟如下:
1、創建存儲結果的字符串
2、把每個字符串復制到結果中的合適位置

雖然這種解決方案很好,但還有更好的方法。問題是,這段代碼不能確切反映出它的意圖。要使它更容易理解,可以用 StringBuffer 類打包該功能:

function StringBuffer () {
 this._strings_ = new Array();
}
StringBuffer.prototype.append = function(str) {
 this._strings_.push(str);
};
StringBuffer.prototype.toString = function() {
 return this._strings_.join("");
};

這段代碼首先要注意的是 strings 屬性,本意是私有屬性。它只有兩個方法,即 append() 和 toString() 方法。append() 方法有一個參數,它把該參數附加到字符串數組中,toString() 方法調用數組的 join 方法,返回真正連接成的字符串。要用 StringBuffer 對象連接一組字符串,可以用下面的代碼:

var buffer = new StringBuffer ();
buffer.append("hello ");
buffer.append("world");
var result = buffer.toString();

可用下面的代碼測試 StringBuffer 對象和傳統的字符串連接方法的性能:

var d1 = new Date();
var str = "";
for (var i=0; i < 10000; i++) {
 str += "text";
}
var d2 = new Date();
document.write("Concatenation with plus: "
 + (d2.getTime() - d1.getTime()) + " milliseconds");
var buffer = new StringBuffer();
d1 = new Date();
for (var i=0; i < 10000; i++) {
 buffer.append("text");
}
var result = buffer.toString();
d2 = new Date();
document.write("<br />Concatenation with StringBuffer: "
 + (d2.getTime() - d1.getTime()) + " milliseconds");

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作能帶來一定的幫助~如果有疑問大家可以留言交流,謝謝大家對億速云的支持!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

镇康县| 公安县| 南京市| 丹江口市| 南澳县| 南召县| 酉阳| 邵东县| 泌阳县| 奇台县| 潍坊市| 梁河县| 峨边| 吕梁市| 聊城市| 天峨县| 庄浪县| 西和县| 瑞丽市| 兰州市| 浮梁县| 张家口市| 南安市| 东辽县| 巴里| 尼玛县| 墨竹工卡县| 台中县| 祁东县| 保定市| 山东| 禹州市| 承德县| 平果县| 清苑县| 治县。| 星座| 镇赉县| 渭南市| 乌拉特后旗| 玉溪市|