温故知新——JavaScript中的字符串连接问题最全总结(推荐)
发布时间 - 2026-01-11 02:53:41 点击率:次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 字符串连接的性能问题(多浏览器)
# 这段
# 可以用
# 问题是
# 的是
# 组中
# 这一
# 就会
# 很好
# 都不
# 成问题
# 要注意
# 要用
# 只在
# 这篇文章
# 谢谢大家
# 更容易
# 时才
# 解决方法
# 最常见
# 使它
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
千问怎样用提示词获取健康建议_千问健康类提示词注意事项【指南】
Python数据仓库与ETL构建实战_Airflow调度流程详解
移动端脚本框架Hammer.js
夸克浏览器网页跳转延迟怎么办 夸克浏览器跳转优化
Laravel怎么解决跨域问题_Laravel配置CORS跨域访问
网站制作大概多少钱一个,做一个平台网站大概多少钱?
Laravel怎么创建控制器Controller_Laravel路由绑定与控制器逻辑编写【指南】
JavaScript如何实现继承_有哪些常用方法
如何快速搭建高效香港服务器网站?
EditPlus中的正则表达式实战(5)
如何在云虚拟主机上快速搭建个人网站?
Laravel如何使用Eloquent ORM进行数据库操作?(CRUD示例)
厦门模型网站设计制作公司,厦门航空飞机模型掉色怎么办?
微信h5制作网站有哪些,免费微信H5页面制作工具?
标题:Vue + Vuex + JWT 身份认证的正确实践与常见误区解析
Laravel如何实现图片防盗链功能_Laravel中间件验证Referer来源请求【方案】
Laravel Eloquent关联是什么_Laravel模型一对一与一对多关系精讲
高性价比服务器租赁——企业级配置与24小时运维服务
网站广告牌制作方法,街上的广告牌,横幅,用PS还是其他软件做的?
Laravel如何实现数据库事务?(DB Facade示例)
QQ浏览器网页版登录入口 个人中心在线进入
php 三元运算符实例详细介绍
Laravel如何与Docker(Sail)协同开发?(环境搭建教程)
网站制作壁纸教程视频,电脑壁纸网站?
学生网站制作软件,一个12岁的学生写小说,应该去什么样的网站?
jQuery中的100个技巧汇总
html如何与html链接_实现多个HTML页面互相链接【互相】
企业在线网站设计制作流程,想建设一个属于自己的企业网站,该如何去做?
Laravel路由Route怎么设置_Laravel基础路由定义与参数传递规则【详解】
深圳网站制作设计招聘,关于服装设计的流行趋势,哪里的资料比较全面?
今日头条AI怎样推荐抢票工具_今日头条AI抢票工具推荐算法与筛选【技巧】
HTML透明颜色代码怎么让图片透明_给img元素加透明色的技巧【方法】
Linux系统运维自动化项目教程_Ansible批量管理实战
微信小程序 HTTPS报错整理常见问题及解决方案
Laravel怎么实现微信登录_Laravel Socialite第三方登录集成
EditPlus中的正则表达式 实战(1)
开心动漫网站制作软件下载,十分开心动画为何停播?
Laravel如何生成和使用数据填充?(Seeder和Factory示例)
Laravel如何使用Service Container和依赖注入?(代码示例)
Laravel怎么使用Markdown渲染文档_Laravel将Markdown内容转HTML页面展示【实战】
Laravel怎么实现模型属性转换Casting_Laravel自动将JSON字段转为数组【技巧】
零服务器AI建站解决方案:快速部署与云端平台低成本实践
Laravel如何实现文件上传和存储?(本地与S3配置)
微信小程序 wx.uploadFile无法上传解决办法
JavaScript模板引擎Template.js使用详解
如何在万网自助建站中设置域名及备案?
Laravel如何使用Service Provider服务提供者_Laravel依赖注入与容器绑定【深度】
Laravel如何使用Contracts(契约)进行编程_Laravel契约接口与依赖反转
Laravel如何使用Sanctum进行API认证?(SPA实战)
Midjourney怎样加参数调细节_Midjourney参数调整技巧【指南】

