JavaScript字符串拼接
作为前端工程师,大部分时间在和业务作斗争,当然可能有一些例外,不过大体如是,而在处理业务时总会和字符串打交道,而字符串的拼接和截取是无法避免的,这里对这些部分进行一些探索。
JavaScript字符串拼接
目前本文打算探索的方法包括:
+=
Array.prototype.join【数组】
String.prototype.concat [字符串]
这是比较常见的方法;代码如下:
var arrayTest = [];
for(var i=0;i<1000000;i++){
arrayTest.push(i);
}
//test += used time
var startTimex,
endTimex,
resx;
startTimex = new Date().getTime();
for(var x=0, xlen=arrayTest.length; x<xlen; x++){
resx += arrayTest[x] + '_';
}
console.log(new Date().getTime() - startTimex);
console.log("use += method need time");
// use join
var startTimey,
endTimey,
resy;
startTimey = new Date().getTime();
resy = arrayTest.join('_');
console.log(new Date().getTime() - startTimey);
console.log("use join method need time");
// use join but array need handle
var startTimez,
endTimez,
arrayHandle=[],
resz;
startTimez = new Date().getTime();
for(var z=0, zlen=arrayTest.length; z<zlen; z++){
arrayHandle.push(arrayTest[z]);
}
resz = arrayHandle.join('_');
console.log(new Date().getTime() - startTimez);
console.log("use join method and handle array need time");
//use string concat method
var startTimem,
endTimem,
resm;
startTimem = new Date().getTime();
for(var m=0, mlen=arrayTest.length; m<mlen; m++){
resm = String.prototype.concat(resm, '-', arrayTest[m]);
}
console.log(new Date().getTime() - startTimem);
console.log("use string concat method need time");
运行测试只是使用了firefox、chrome、safari;结果如下:
chrome测试结果:
firefox结果:
safari结果:
由于测试的浏览器都比较的新,所以上面的结果表明是join的方法还是效率要高点,不过这是在庞大的数据拼接上体现的,一般业务也不会有这么大的拼接,所以其实这个问题已经不大了,没有必要进行特意的注意。
字符串的截取
使用的方法是slice、substr、substring 三种方法;
slice:
使用方法:string.slice(start,end)
参数说明
start 必须. 要抽取的片断的起始下标。第一个字符位置为 0
end 可选。 紧接着要抽取的片段的结尾的下标。若未指定此参数,则要提取的子串包括 start 到原字符串结尾的字符串。如果该参数是负数,那么它规定的是从字符串的尾部开始算起的位置。
返回值:String 提取的字符串
substr
语法: string.substr(start,length)
参数值
start 必需。要抽取的子串的起始下标。必须是数值。如果是负数,那么该参数声明从字符串的尾部开始算起的位置。也就是说,-1 指字符串中最后一个字符,-2 指倒数第二个字符,以此类推。
length 可选。子串中的字符数。必须是数值。如果省略了该参数,那么返回从 stringObject 的开始位置到结尾的字串。
返回值
String A new string containing the extracted part of the text
substring
语法:string.substring(from, to)
参数
from 必需。一个非负的整数,规定要提取的子串的第一个字符在 string Object 中的位置。
to 可选。一个非负的整数,比要提取的子串的最后一个字符在 string Object 中的位置多 1。
如果省略该参数,那么返回的子串会一直到字符串的结尾。
区别
三个方法之间的主要区别如下:
三个方法的参数1都代表子串开始位置,参数2在slice和substring中表示结束位置,而在substr中代表的则是子串长度;
对于负数态度,当出现在参数1的位置时,slice和substr从末尾开始计算,而substring不支持末尾计数法直接视为0;当出现在参数2位置时,slice和substring的处理同参数1:前者从末尾开始计算,后者转换成0,而substr则视负数长度为0返回空串;
对于参数1小于参数2的情况,substring最大的不同在于它会交换两个参数再截取子串,substr因第二参数表示的是长度因此并无异常,slice曽依然正常搜寻子串始末位置,若开始位置在结尾后边则返回空串。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。