浅谈JS中的三种字符串连接方式及其性能比较


Posted in Javascript onSeptember 02, 2016

工作中经常会碰到要把2个或多个字符串连接成一个字符串的问题,在JS中处理这类问题一般有三种方法,这里将它们一一列出顺便也对它们的性能做个具体的比较。

第一种方法 用连接符“+”把要连接的字符串连起来:

str="a";
str+="b";

毫无疑问,这种方法是最便捷快速的,如果只连接100个以下的字符串建议用这种方法最方便。

第二种方法 以数组作为中介用 join 连接字符串:

var arr=new Array();
arr.push(a);
arr.push(b);
var str=arr.join("");

w3school 网站介绍说这种方法要比第一种消耗更少的资源,速度也更快,后面我们通过实验再验证是否是这样。

第三种方法 利用对象属性来连接字符串

function stringConnect(){
  this._str_=new Array();
}
stringConnect.prototype.append=function(a){
  this._str_.push(a);
}
stringConnect.prototype.toString=function(){
  return this._str_.join();
}
  var mystr=new stringConnect;
  mystr.append("a");
  var str=mystr.toString();

利用下面代码对三种方法性能进行比较,通过更改 c 的值来调整连接字符串的个数:

var str="";
var d1,d2;
var c=5000;//连接字符串的个数


//------------------------测试第三种方法耗费时间-------
 d1=new Date();
function stringConnect(){
  this._str_=new Array();
}
stringConnect.prototype.append=function(a){
  this._str_.push(a);
}
stringConnect.prototype.toString=function(){
  return this._str_.join("");
}
  var mystr=new stringConnect;

  for(var i=0;i<c;i++){
    mystr.append("a");
  }
str=mystr.toString();
 d2=new Date();
 console.log(d2.getTime()-d1.getTime());
//-----------------------------------------------------

//------------------------测试第二种方法耗费时间-------
d1=new Date();
  var arr=new Array();
for(var i=0;i<c;i++){
  arr.push("a");
}
str=arr.join("");
  d2=new Date();
console.log(d2.getTime()-d1.getTime());
//-------------------------------------------------------

//------------------------测试第一种方法耗费时间-------
d1=new Date();for(var i=0;i<c;i++){
  str+="a";
}
d2=new Date();
console.log(d2.getTime()-d1.getTime());
//-------------------------------------------------------

我调整 c 分别等于5000、50000、500000、5000000,每个数值分别测了10次,最后结果如下:

c=5000
平均耗时(单位毫秒)
第三种 3 2 2 3 1 2 2 1 1 1 1.8
第二种 1 3 0 3 1 3 4 1 4 2 2.2
第一种 0 0 0 0 0 1 1 1 1 1 0.5

c=50000

第三种 22 12 9 14 12 13 13 13 10 17 13.5
第二种 8 13 12 8 11 11 8 9 8 9 9.7
第一种 7 12 5 11 10 10 10 13 16 12 10.6

c=500000

第三种 104 70 74 69 76 77 69 102 73 73 78.7
第二种 78 100 99 99 100 98 96 71 94 97 93.2
第一种 90 87 83 85 85 83 84 83 88 86 85.4

c=5000000

第三种 651 871 465 444 1012 436 787 449 432 444 599.1
第二种 568 842 593 747 417 747 719 549 573 563 631.8
第一种 516 279 616 161 466 416 201 495 510 515 417.5

统计5000000的时候在地址栏加入了随机参数,应该是避免了缓存的影响的。从结果来看,第一种方法并不比另2种方法消耗多,甚至还更有优势,这点和手册上的说明明显不一致。

测试系统:win 7旗舰

浏览器:chrome 52.0.2739.0 m

以上这篇浅谈JS中的三种字符串连接方式及其性能比较就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
PHP abstract与interface之间的区别
Nov 11 Javascript
javascript禁制后退键(Backspace)实例代码
Nov 15 Javascript
现如今最流行的JavaScript代码规范
Mar 08 Javascript
AngularJS表单编辑提交功能实例
Feb 13 Javascript
jQuery实现自动切换播放的经典滑动门效果
Sep 12 Javascript
jQuery提示插件qTip2用法分析(支持ajax及多种样式)
Jun 08 Javascript
JavaScript获取IP获取的是IPV6 如何校验
Jun 12 Javascript
a标签置灰不可点击的实现方法
Feb 06 Javascript
史上最全JavaScript常用的简写技巧(推荐)
Aug 17 Javascript
laravel-admin 与 vue 结合使用实例代码详解
Jun 04 Javascript
JavaScript创建表格的方法
Apr 13 Javascript
javascript代码简写的几种常用方式汇总
Aug 23 Javascript
AngularJs  E2E Testing 详解
Sep 02 #Javascript
解决node.js安装包失败的几种方法
Sep 02 #Javascript
js两种拼接字符串的简单方法(必看)
Sep 02 #Javascript
AngularJs Understanding the Controller Component
Sep 02 #Javascript
JS 拼凑字符串的简单实例
Sep 02 #Javascript
AngularJs Understanding the Model Component
Sep 02 #Javascript
浅谈js中StringBuffer类的实现方法及使用
Sep 02 #Javascript
You might like
php 读取输出其他文件的实现方法
2016/07/26 PHP
laravel如何开启跨域功能示例详解
2017/08/31 PHP
php+websocket 实现的聊天室功能详解
2020/05/27 PHP
php+mysql+ajax 局部刷新点赞/取消点赞功能(每个账号只点赞一次)
2020/07/24 PHP
jQuery 对Select的操作备忘记录
2011/07/04 Javascript
jquery创建一个新的节点对象(自定义结构/内容)的好方法
2013/01/21 Javascript
js鼠标点击事件在各个浏览器中的写法及Event对象属性介绍
2013/01/24 Javascript
JS等比例缩小图片尺寸的实例
2013/02/27 Javascript
js中for in的用法示例解析
2013/12/25 Javascript
JavaScript正则表达式中的ignoreCase属性使用详解
2015/06/16 Javascript
javascript jquery对form元素的常见操作详解
2016/06/12 Javascript
jQuery ajax MD5实现用户注册即时验证功能
2016/10/11 Javascript
jquery实现数字输入框
2017/02/22 Javascript
jQuery实现选项卡功能(两种方法)
2017/03/08 Javascript
Angularjs2不同组件间的通信实例代码
2017/05/06 Javascript
jQuery实现可兼容IE6的遮罩功能详解
2017/09/19 jQuery
windows系统下更新nodejs版本的方案
2017/11/24 NodeJs
对layui中表单元素的使用详解
2018/08/15 Javascript
在Vant的基础上实现添加表单验证框架的方法示例
2018/12/05 Javascript
react的滑动图片验证码组件的示例代码
2019/02/27 Javascript
vue使用nprogress加载路由进度条的方法
2020/06/04 Javascript
基于javascript canvas实现五子棋游戏
2020/07/08 Javascript
微信小程序实现点击导航条切换页面
2020/11/19 Javascript
python实现对excel进行数据剔除操作实例
2017/12/07 Python
解决Atom安装Hydrogen无法运行python3的问题
2019/08/28 Python
40行Python代码实现天气预报和每日鸡汤推送功能
2020/02/27 Python
心理学专业毕业生推荐信范文
2013/11/21 职场文书
2014年五一促销活动方案
2014/03/09 职场文书
需求分析说明书
2014/05/09 职场文书
医疗器械售后服务承诺书
2014/05/21 职场文书
暑期教师培训方案
2014/06/07 职场文书
关于成立领导小组的通知
2015/04/23 职场文书
2015年教师节新闻稿
2015/07/17 职场文书
2016年感恩节寄语
2015/12/07 职场文书
中学生打架《检讨书》范文
2019/08/12 职场文书
golang 实现时间戳和时间的转化
2021/05/07 Golang