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

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

工作中经常会碰到要把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

 


突破传统的上网方式,不用记网址、不用搜索引擎,输入一两个字母就能迅速打开你想访问的任何网站——
小笨猪网址索引

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/112635.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 软件项目管理知识点总结

    软件项目管理知识点总结软件项目管理第1章软件项目管理概述1、项目的基本概念(注意与日常运作的区分)和特征;2、软件项目及特征;3、项目管理的基本概念;4、项目管理知识体系(以2017年发布的PMBOK6的十个知识领域为准);5、适用于软件项目管理的知识体系。​第2章项目确立&第3章生存期模型【项目初始】1、理解项目启动的基本过程(项目评估、项目立项、招投标、发布项目章程);2、项目章程的主要内容和作用;3、理解各生存期模型的优缺点及适用场景。第4章软件项目需求管理1、软件需求的概念及层次;2、需求工程的组成。需

    2022年5月9日
    41
  • MFC应用程序——标签控件_IP控件_时间控件_List Control控件_Tree Control控件_命令按钮_列表框_组合框_图片_滚动控件「建议收藏」

    MFC应用程序——标签控件_IP控件_时间控件_List Control控件_Tree Control控件_命令按钮_列表框_组合框_图片_滚动控件「建议收藏」标签控件应用【Tab Control 标签控件】 标签控件也比较常见。它可以把多个页面集成到一个窗口中, 每个页面对应一个标签,用户点击某个标签时,它对应的页 面就会显示。 使用标签控件我们可以同时加载多个有关联的页面,用 户只需点击标签即可实现页面切换,方便灵活的进行操作。 每个标签除了可以显示标签文本,还可以显示图标。 标签控件相当于是一个页面的容器,可以容纳多个对话 框,而且一般也只容纳对…

    2022年8月18日
    6
  • imread参数_imread函数图片路径matlab

    imread参数_imread函数图片路径matlabimread的函数原型是:Matimread(conststring&filename,intflags=1);Mat是OpenCV里的一个数据结构,在这里我们定义一个Mat类型的变量img,用于保存读入的图像,在本文开始有写到,我们用imread函数来读取图像,第一个字段标识图像的文件名(包括扩展名),第二个字段用于指定读入图像的颜色和深度,它的取值可以有以下几种:

    2022年10月14日
    3
  • centos7下kafka集群搭建

    centos7下kafka集群搭建概述集群安装或者单机安装都可以,这里介绍集群安装。Kafka本身安装包也自带了zookeeper,也可以使用其自带的zookeeper。建议试用自己安装的zookeeper,本教程试用单独安装的zookeeper。安装环境3台centos7虚拟机:10.15.21.6210.10.182.16810.10.182.169kafka_2.10-0.10.2.0zookeeper-3.4.9

    2022年6月5日
    32
  • 雷达篇(二)线性调频信号公式推导及matlab仿真

    雷达篇(二)线性调频信号公式推导及matlab仿真线性调频信号的数学表达式:其中,t是时间变量,单位为秒(s);T为脉冲持续时间(周期);K是线性调频率,单位是Hz/s;角度(单位为弧度)表达式:…

    2022年5月31日
    87
  • 计算机组成与设计(六)—— 乘法器[通俗易懂]

    计算机组成与设计(六)—— 乘法器[通俗易懂]乘法的运算过程人们日常习惯的乘法是十进制,但计算机实现起来不方便。首先,需要记录9×9乘法表,每次相乘去表中找结果;其次,将竖式相加也不方便。但二进制却十分方便,冯·诺伊曼在《关于END

    2022年8月5日
    9

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号