JavaScript 怎样高效拼接字符串?

发布网友 发布时间:2022-04-25 17:54

我来回答

10个回答

热心网友 时间:2022-05-14 14:53

就像在C#中一样,可以使用”+”来拼接字符串,而对于操作频繁、讲究效率的字符串拼接操作应该选择StringBuilder类。在JavaScript中是否也存在这个问题呢?答案是肯定的,虽然JavaScript并没有为提供一个内置的StringBuilder对象,但是可以自己来创建一个!至于效率到底能提高多少,让程序说话吧!

//---StringBuilder---
function StringBuilder(){
this.__string__ = new Array();
}
StringBuilder.prototype.append = function(str){
this.__string__.push(str);
}
StringBuilder.prototype.toString = function(){
return this.__string__.join("");
}
 
var d1 = new Date();
var buffer = new StringBuilder();
for(var i = 1; i < 10000; i++){
buffer.append("E3Card");
}
var strResult = buffer.toString();
var d2 = new Date();
 
document.write("StringBuilder用时:" + (d2.getTime() - d1.getTime()) + "<br/>");
 
//---+-----
var d3 = new Date();
var str = "";
for(var i = 1; i < 10000; i++){
str += "E3Card";
}
var d4 = new Date();
document.write("+链接用时:" + (d4.getTime() - d3.getTime()) + "<br/>");

在机器上(Core2 3.0G/4GRAM),反复F5后得到一个,比较平稳的测试结果:

StringBuilder用时:32
+链接用时:1109

哇哦,30多倍,没看错吧!

好了,赶紧自己做好一个Lib,以后都用这个StringBuilder吧:

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

热心网友 时间:2022-05-14 16:11

(1)新版本的浏览器对拼接字符串做了优化,如果不是要兼容比较老的浏览器比如IE6,可以不做优化
(2)优化一般从两个地方着手
a.如果是for(var i=0;i<arr.length;i++),在这里面拼接,可以在循环外边用一个变量缓存一下arr.length,把i<arr.length改成i<缓存的那个变量,这样不用每次取length.
b.把要拼接的字符串都push到一个js数组里,再用数组的join方法,以空字符串join,这样就不会有过多的字符串创建和销毁,从而提高效率.

热心网友 时间:2022-05-14 17:46

模拟JAVA的StringBuffer这种缓冲机制,其原理是利用数组进行拼接,源代码如下:

function StringBuffer() {
this.__strings__ = new Array();
}
StringBuffer.prototype.append = function (str) {
this.__strings__.push(str);
return this; //方便链式操作
}
StringBuffer.prototype.toString = function () {
return this.__strings__.join("");
}

/*测试*/
var buffer = new StringBuffer();
buffer.append("Hello ").append("javascript");
var result = buffer.toString();
alert(result);

热心网友 时间:2022-05-14 19:37

最简单的方式就是直接用+号链接,因为js是弱类型语言,不区分具体类型,直接字符串a+b+c就行,不放心的话中间可以加上"";

热心网友 时间:2022-05-14 21:45

百度的高质量提问就是一个脑残的设计,只能看到提问,不能看到问题详情,怎样获得高质量的回答????

另外,也看不到其它人的回答,如果其它人回答了,我再来回答一次,不是很浪费时间与精力?!

@百度知道 脑残设计!!!

热心网友 时间:2022-05-15 00:10

ES6 提供了新的拼接方法:利用 ` ` (数字1左边的那个键位)拼接,不用再依赖+号拼接

热心网友 时间:2022-05-15 02:51

// 用数组的join,如果是循环的话,在循环中将值push到数组
var arr = [];
arr.push("string1");

arr.push("string2");
res = arr.join('');

热心网友 时间:2022-05-15 05:49

for(var i = 0; i<10; i++){
var str += 'str'+i;

console.log(str);

}

热心网友 时间:2022-05-15 09:04

加号 "a"+"b"

热心网友 时间:2022-05-15 12:35

var hl="";
hl+="";

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com