全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

温故知新——JavaScript中的字符串连接问题最全总结(推荐)

ECMAScript 中最常见的一个问题是字符串连接的性能。与其他语言类似,ECMAScript 的字符串是不可变的,即它们的值不能改变。请考虑下面的代码:

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

实际上,这段代码在幕后执行的步骤如下:

1、创建存储 "hello " 的字符串。
2、创建存储 "world" 的字符串。
3、创建存储连接结果的字符串。
4、把 str 的当前内容复制到结果中。
5、把 "world" 复制到结果中。
6、更新 str,使它指向结果。

每次完成字符串连接都会执行步骤 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 < 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");

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助~如果有疑问大家可以留言交流,谢谢大家对的支持!


# js  # 字符串连接  # 浅谈JS中的三种字符串连接方式及其性能比较  # 你必须知道的JavaScript 中字符串连接的性能的一些问题  # 再论Javascript下字符串连接的性能  # 数组方法解决JS字符串连接性能问题有争议  # javascript下高性能字符串连接StringBuffer类  # JS 字符串连接[性能比较]  # JavaScript 字符串连接性能优化  # javascript 字符串连接的性能问题(多浏览器)  # 这段  # 可以用  # 问题是  # 的是  # 组中  # 这一  # 就会  # 很好  # 都不  # 成问题  # 要注意  # 要用  # 只在  # 这篇文章  # 谢谢大家  # 更容易  # 时才  # 解决方法  # 最常见  # 使它 


相关文章: Android滚轮选择时间控件使用详解  微网站制作教程,我微信里的网站怎么才能复制到浏览器里?  在线制作视频网站免费,都有哪些好的动漫网站?  建站之星如何实现网站加密操作?  建站之星×万网:智能建站系统+自助建站平台一键生成  上海网站制作网站建设公司,建筑电工证网上查询系统入口?  建站之星会员如何解锁更多建站功能?  浅析上传头像示例及其注意事项  已有域名如何快速搭建专属网站?  智能起名网站制作软件有哪些,制作logo的软件?  英语简历制作免费网站推荐,如何将简历翻译成英文?  建站OpenVZ教程与优化策略:配置指南与性能提升  完全自定义免费建站平台:主题模板在线生成一站式服务  如何通过NAT技术实现内网高效建站?  ,购物网站怎么盈利呢?  Bpmn 2.0的XML文件怎么画流程图  全景视频制作网站有哪些,全景图怎么做成网页?  制作无缝贴图网站有哪些,3dmax无缝贴图怎么调?  如何在阿里云服务器自主搭建网站?  建站主机SSH密钥生成步骤及常见问题解答?  如何打造高效商业网站?建站目的决定转化率  如何制作一个表白网站视频,关于勇敢表白的小标题?  C#如何使用XPathNavigator高效查询XML  制作证书网站有哪些,全国城建培训中心证书查询官网?  C++ static_cast和dynamic_cast区别_C++静态转换与动态类型安全转换  如何用花生壳三步快速搭建专属网站?  如何快速启动建站代理加盟业务?  如何配置WinSCP新建站点的密钥验证步骤?  正规网站制作公司有哪些,目前国内哪家网页网站制作设计公司比较专业靠谱?口碑好?  在线流程图制作网站手机版,谁能推荐几个好的CG原画资源网站么?  建站主机核心功能解析:服务器选择与网站搭建流程指南  定制建站流程解析:需求评估与SEO优化功能开发指南  深圳 网站制作,深圳招聘网站哪个比较好一点啊?  建站主机解析:虚拟主机配置与服务器选择指南  如何快速生成凡客建站的专业级图册?  广德云建站网站建设方案与建站流程优化指南  如何在云主机上快速搭建网站?  ,如何利用word制作宣传手册?  如何在Windows 2008云服务器安全搭建网站?  制作网站的软件免费下载,免费制作app哪个平台好?  猪八戒网站制作视频,开发一个猪八戒网站,大约需要多少?或者自己请程序员,需要什么程序员,多少程序员能完成?  高防服务器租用指南:配置选择与快速部署攻略  学校为何禁止电信移动建设网站?  为什么Go需要go mod文件_Go go mod文件作用说明  建站主机默认首页配置指南:核心功能与访问路径优化  网站建设制作、微信公众号,公明人民医院怎么在网上预约?  如何在VPS电脑上快速搭建网站?  建站之星好吗?新手能否轻松上手建站?  c++怎么实现高并发下的无锁队列_c++ std::atomic原子变量与CAS操作【详解】  如何制作公司的网站链接,公司想做一个网站,一般需要花多少钱? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。