这篇文章主要介绍了js中的字符串连接问题,ecmascript 中最常见的一个问题是字符串连接的性能。在调用 join() 方法时才会发生连接操作,具体操作步骤大家可查看下文的详细讲解,感兴趣的小伙伴们可以参考一下。
ECMAScript 中最常见的一个问题是字符串连接的性能。与其他语言类似,ECMAScript 的字符串是不可变的,即它们的值不能改变。请考虑下面的代码:
var str = "hello ";str += "world";
登录后复制
实际上,这段代码在幕后执行的步骤如下:
1、创建存储 “hello ” 的字符串。
2、创建存储 “world” 的字符串。
3、创建存储连接结果的字符串。
4、把 str 的当前内容复制到结果中。
5、把 “world” 复制到结果中。
6、更新 str,使它指向结果。
立即学习“Java免费学习笔记(深入)”;
每次完成字符串连接都会执行步骤 2 到 6,使得这种操作非常消耗资源。如果重复这一过程几百次,甚至几千次,就会造成性能问题。解决方法是用 Array 对象存储字符串,然后用 join() 方法(参数是空字符串)创建最后的字符串。想象用下面的代码代替前面的代码:
var arr = new Array();arr[0] = "hello ";arr[1] = "world";var str = arr.join("");
登录后复制
这样,无论数组中引入多少字符串都不成问题,因为只在调用 join() 方法时才会发生连接操作。此时,执行的步骤如下:
1、创建存储结果的字符串
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() 方法有一个参数,它把该参数附加到字符串数组中,toString() 方法调用数组的 join 方法,返回真正连接成的字符串。要用 StringBuffer 对象连接一组字符串,可以用下面的代码:
var buffer = new StringBuffer ();buffer.append("hello ");buffer.append("world");var result = buffer.toString();
登录后复制
可用下面的代码测试 StringBuffer 对象和传统的字符串连接方法的性能:
var d1 = new Date();var str = "";for (var i=0; i Concatenation with StringBuffer: " + (d2.getTime() - d1.getTime()) + " milliseconds");
登录后复制
上面是我整理给大家的,希望今后会对大家有帮助。
相关文章:
JS新手使用频繁出错点有哪些
JS EventEmitter使用技巧总结
使用JS进行文件拖拽
以上就是JavaScript中的字符串连接问题(图文教程)的详细内容,更多请关注【创想鸟】其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。
发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2761017.html