国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > JavaScript > 正文

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

2024-05-06 15:12:36
字體:
來源:轉載
供稿:網(wǎng)友

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

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

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

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

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

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

這樣,無論數(shù)組中引入多少字符串都不成問題,因為只在調用 join() 方法時才會發(fā)生連接操作。此時,執(zhí)行的步驟如下:
1、創(chuàng)建存儲結果的字符串
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() 方法有一個參數(shù),它把該參數(shù)附加到字符串數(shù)組中,toString() 方法調用數(shù)組的 join 方法,返回真正連接成的字符串。要用 StringBuffer 對象連接一組字符串,可以用下面的代碼:

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

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

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");

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

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表

圖片精選

主站蜘蛛池模板: 永仁县| 讷河市| 喜德县| 凤台县| 阿尔山市| 深泽县| 类乌齐县| 大关县| 西林县| 卓资县| 龙门县| 库尔勒市| 枣阳市| 兴业县| 寻乌县| 原阳县| 垫江县| 汝州市| 苏尼特右旗| 泸西县| 盘山县| 勐海县| 五台县| 华亭县| 新晃| 郯城县| 雅江县| 阜城县| 公安县| 曲水县| 寻乌县| 宁津县| 万全县| 阜城县| 吉隆县| 方城县| 三江| 泽库县| 丹凤县| 农安县| 静海县|