最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時間:2017年08月21日 14:33:44   作者:momomini  
這篇文章主要介紹了JS中的字符串連接問題,ECMAScript 中最常見的一個問題是字符串連接的性能。在調(diào)用 join() 方法時才會發(fā)生連接操作,具體操作步驟大家可查看下文的詳細(xì)講解,感興趣的小伙伴們可以參考一下。

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

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

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

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

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

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

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

雖然這種解決方案很好,但還有更好的方法。問題是,這段代碼不能確切反映出它的意圖。要使它更容易理解,可以用 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ù)附加到字符串?dāng)?shù)組中,toString() 方法調(diào)用數(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");

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作能帶來一定的幫助~如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持!

相關(guān)文章

最新評論

元朗区| 德安县| 观塘区| 综艺| 江源县| 会东县| 丹棱县| 荣昌县| 库伦旗| 新河县| 平顶山市| 汨罗市| 灌阳县| 遂昌县| 濉溪县| 嘉荫县| 伊金霍洛旗| 洪湖市| 济宁市| 武乡县| 子洲县| 高州市| 长治市| 县级市| 平利县| 宝应县| 晋城| 桃园市| 靖宇县| 日喀则市| 高雄县| 东乡县| 牟定县| 乌苏市| 天津市| 孝昌县| 涡阳县| 遵义县| 长顺县| 九江县| 罗甸县|