javascript中字符串拼接详解
来源:互联网 发布:科技公司网站源码 编辑:程序博客网 时间:2024/05/22 04:33
javascript中字符串拼接详解
投稿:hebedich 字体:[增加 减小] 类型:转载 时间:2014-09-26 我要评论
最近在研究《javascript高级程序设计》中,有一段关于字符串特点的描述,原文大概如下:ECMAScript中的字符串是不可变的,也就是说,字符串一旦创建,他们的值就不能改变。要改变某个变量的保存的的字符串,首先要销毁原来的字符串,然后再用另外一个包含新值的字符串填充该变量,例如:
var lang = "Java";
lang = lang + "Script";
实现这个操作的过程如下:首先创建一个能容纳10个字符的新字符串,然后在这个字符串中填充“Java”和“Script”,最后一步是销毁原来的字符串“Java”和“Script”,因为这两个字符串已经没用了。但是在低版本的浏览器(如IE6)中,字符串拼接速度是很消耗一个性能的过程。
由此我就联想到了Java,在Java中的字符串机制也和js差不多(即创建了就不能改变,要改变只能销毁原来的值),但是Java有个StringBuffer解决了字符串不可变的问题,js且没有类似的方法。但是我们可以模拟这种缓冲机制。其原理是利用数组进行拼接,源代码如下:
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);
ps:gist地址如下:https://gist.github.com/hehongwei44/fe71f10e4d2d9295aeab
机制我们模拟出来了,但是这个方法和字符串拼接性能上有多少差别了,我们可以测试一下,测试代码如下:
var d1 = new Date();
var str = "";
for(var i = 0; i < 10000; i++){
str += "text ";
}
var d2 = new Date();
document.write("测试一花费: " + (d2.getTime() - d1.getTime())/1000 + "秒"+"<br/>");
var oBuffer = new StringBuffer();
d3 = new Date();
for(var i = 0; i < 10000; i++){
oBuffer.append("text ");
}
var sResult = oBuffer.toString();
d4 = new Date();
document.write("测试二花费: " + (d4.getTime() - d3.getTime())/1000 + "秒");
测试结果如下:(环境不同,测试结果可能不同):
1.在以1000次为基数的情况下,进行比较,两者执行都非常快(基本都是几毫秒)耗时都差不多,后者以前者相差不会超过10个毫秒。
2.在以10000次为基数的情况下,执行结果和上面差不多,但是前者在IE6下话费的事件较多。
3.在以100000次为基数的情况下,字符串拼接在IE6下,明显花的时间更多,其他浏览器相差不大,有的反而比StringBuffer更短。
结论
1.在拼接词数少于1000次的情况下,大胆的使用前者,一般我们也很少碰到拼接次数上千的情况。
2.其他浏览器对于拼接都没什么性能问题,主要是IE6,如果拼接次数上万或者十万的话,建议单独对IE6是用StringBuffer模拟。
- javascript中字符串拼接详解
- JavaScript中,加法变成拼接字符串
- javascript 拼接字符串
- JavaScript拼接字符串
- javascript拼接字符串
- JavaScript--9.字符串拼接
- JavaScript中字符串的拼接出错,单引号双引号混合使用
- shell中字符串拼接
- Mysql中字符串拼接
- Smarty中拼接字符串
- Javascript 中的长字符串拼接
- Javascript中的长字符串拼接
- Javascript 中的长字符串拼接
- 关于JavaScript拼接字符串问题
- php中字符串的拼接
- mysql 中字符串拼接问题
- js中html字符串拼接
- java中拼接Json字符串
- 解决远程连接mysql错误1130
- 第十三周项目1(2)
- 【入门】数据分析六部曲
- Qt 获取本机的IP地址、Mac地址
- c++ 11个性特性
- javascript中字符串拼接详解
- D3.js中的Chord Diagram详解
- xshell+xftp将项目部署到远程服务器上
- webpack+vue+vueRouter模块化构建完整项目实例超详细步骤(附截图、代码、入门篇)
- 10、新手入手树莓派教程--Qt中使用wiringPi来开发工程
- IT运维管理系统的十大无奈之处
- 147. Insertion Sort List
- 【第八周】项目三 顺序串算法
- 用Caffe在MNIST上训练LeNet