摆脱JS糟糕的字符串连接
一、ECMAScript的字符串是不可变的,即它们的值不能改变,因此当你写出下面的代码的时候发生了什么呢?
Js代码
- var str = “Hello “;
- str += “world”;
执行的步骤如下:
- 创建存储“Hello“的字符串
- 创建存储”world“的字符串
- 创建存储连接结果的字符串
- 把str的当前内容复制到结果中
- 把“world”复制到结果中
- 更新str,使它指向结果
每次完成字符串的连接都会执行步骤2-6,使得这种操作非常消耗资源。想象一下重复这个过程几百次,甚至几千次,那性能如何?
二、那么再看看下面的代码,来解决这种窘况
Js代码
- var arr = new Array;
- arr[0] = “Hello “;
- arr[1] = “world”;
- var str = arr.join(“”);
执行的步骤如下:
- 创建存储结果的字符串
- 把每个字符串复制到结果中的适当位置
这样,无论数组要引入多少字符串都不成问题,因为只有在调用join()方法时候才会发生连接操作。
三、觉得操作很复杂?代码不能确切反应它的意图?那么我们用对象的解决方式吧,使它更容易理解,用StringBuffer类来封装该功能:
Js代码
- function StringBuffer() {
- this._strs = new Array;
- }
- StringBuffer.prototype.append = function (str) {
- this._strs.push(str);
- };
- StringBuffer.prototype.toString = function() {
- this._strs.join(“”);
- };
好了,感受一下吧,现在如何操作字符串呢?
Js代码
- var sb = new StringBuffer();
- sb.append(“Hello “); %3
学习中!
o(∩_∩)o
来博主的博客耍耍,博主文章不错,呵呵,交个朋友,由空到我的小博踩踩,欢迎你。
博主太有才了!!!
o(∩_∩)o
学习了!o(∩_∩)o
逐字逐句地看完这个帖子以后,我的心久久不能平静,震撼啊!为什么会有如此好的帖子!我纵横网络论坛多年,自以为再也不会有任何帖子能打动我,没想到今天看到了如此精妙绝伦的这
样一篇帖子!博主,是你让我深深地理解了“人外有人,天外有天”这句话。谢谢侬!在看完这帖子以后,我没有立即回复,因为我生怕我庸俗不堪的回复会玷污了这篇少有的好帖。但是我
还是回复了,因为觉得如果不能在如此精彩的帖子后面留下自己的网名,那我死也不会瞑目的!能够在如此精彩的帖子后面留下自己的网名是多么骄傲的一件事啊!博主,请原谅我的自私!
我知道无论用多么华丽的辞藻来形容楼主您帖子的精彩程度都是不够的,都是虚伪的,所以我只想说一句:您的帖子太好看了!我愿意一辈子看下去!这篇帖子构思新颖,题材独具匠心,段
落清晰,情节诡异,跌宕起伏,主线分明,引人入胜,平淡中显示出不凡的文学功底,可谓是字字珠玑,句句经典,是我辈应当学习之典范。本来我已经对这个网络失望了,觉得这个网络没
有前途了,心里充满了悲哀。但是看了你的这个帖子,又让我对它产生了希望。是你让我的心里重新燃起希望之火,是你让我的心死灰复燃,是你拯救了我一颗拔凉拔凉的心!本来我决定不
在回任何帖子了,但是看了你的博客,我告诉自己这个帖子是一定要回的!这是百年难得一见的好贴啊!苍天有眼啊,让我在有生之年得以观得如此精彩绝伦的帖子
受教了!o(∩_∩)o
This is a good idea! hope to be better!
——– __@
—– _`\<,_
—- (*)/ (*)
临睡觉前来到了博主的博客,冒个泡,睡觉去喽,晚安。
支持博主,华丽上场!
你好博主,专卖SEO视频资料(http://hi.baidu.com/zjxzjy)的1元资料店成立了,希望博主能经常光临哦~
hope and change
hi do you like car rims?