JavaScript字符串String常用操作与性能详解

作者:白帽猫时间:2026-10-23 09:24:02浏览:312

本文系统总结JavaScript中String类型的核心操作。重点解析字符串不可变性及其对IE6-8性能的影响,详细对比indexOf、concat、slice、substring、substr、split及trim等常用方法的参数行为与返回值差异,并提供完整代码示例供参考测试。

字符串不可变性与性能影响

本文详细整理了JavaScript中String类型的一系列常用操作方法,旨在为开发者提供实用的参考与学习素材。

在JavaScript中,字符串对象具有不可变性。

这意味着任何对字符串进行的操作都不会修改原字符串,而是始终返回一个全新的字符串对象。

关于字符串拼接的性能问题,在IE 6和IE 7浏览器中,若执行大量字符串拼接(如' abc ' + ' cdf '),由于需要频繁开辟新内存空间并创建新变量,会导致显著的性能损耗。不过,从IE 8开始,浏览器引擎对此进行了大幅优化,性能表现得到明显改善。

String常用方法详解

接下来介绍字符串处理中最为常用的几类方法。


// 创建字符串
var a = new String('123')
var a = '123'


a.length   // => 3, length属性返回字符串字符的个数
a[0]    // => 1, 索引 求指定索引的字符串
// charAt()方法,也是求指定索引的字符串
a.toUpperCase()  // 将字符串全部转为大写, 
// 例:var str = "hello world"; str.toUpperCase()
a.toLowerCase()  // 将字符串全部转为小写, 
// 例:var str = "HELLO WORLD"; str.toLowerCase()

indexOf():该方法用于搜索指定子字符串在原字符串中首次出现的位置。它接收两个参数:第一个参数为要查找的子串,第二个参数为可选的起始搜索位置。如果找到匹配项,则返回其索引位置;若未找到,则返回-1。


var s = 'hello world!';
alert(s.indexOf('world')); //返回6
alert(s.indexOf('World')); //返回-1
alert(s.indexOf('o'));  //返回4
alert(s.indexOf('o',6));  //从第六位开始查找,返回7

concat():用于将一个或多个字符串拼接在一起,生成并返回一个新的拼接后的字符串,原字符串保持不变。


var str1 = "hello ";
var res = str1.concat(" world","!");
alert(res);  //返回hello world!
alert(str1);  //返回hello

slice():用于提取字符串的子串并返回,原字符串不变。该方法接受两个参数:起始位置和结束位置。返回的子串包含起始位置字符,但不包含结束位置字符。若起始位置大于或等于结束位置,则返回空字符串""。如果只提供一个参数,则从该起始位置一直截取到字符串末尾。若传入负数参数,JavaScript引擎会将其与字符串长度相加后计算实际索引。


var str = "hello world!";
alert(str.slice(3,7));//返回lo w
alert(str.slice(3));//返回lo world!
alert(str.slice(9,5));//返回""
alert(str.slice(-7,-3));//负数与长度相加,即str.slice(5,9)返回 wor
alert(str.slice(5,9));//返回 wor

substring():当传入的参数均为正数时,其功能与slice()基本一致。主要区别在于:若第一个参数大于第二个参数,substring()会自动交换两个参数的位置,将较小的作为起始位置,较大的作为结束位置,且结果不包含结束位置的字符。当传入负数参数时,substring()会将所有负数强制转换为0处理。


var str = "hello world!";
alert(str.substring(3,7));//返回lo w
alert(str.substring(3));//返回lo world!
alert(str.substring(9,5));//返回 wor,即str.substring(5,9),不包含第九项
alert(str.substring(-7,-3));//负数与长度相加,即str.substring(0,0)返回""
alert(str.substring(-7,3));//负数与长度相加,即str.substring(0,3)返回hel

substr():用于从指定位置开始截取指定长度的子字符串,原字符串不变。若省略第二个参数(长度),则默认截取至字符串末尾。当传入负数时,第一个参数(起始位置)会与字符串长度相加计算实际起始点,而第二个参数(长度)若为负数则会被转换为0,导致返回空字符串。


var s = 'hello world!'
alert(s.substr(0, 5));//从索引0开始,截取5个字符串,返回hello
alert(s.substr(7)); //从索引7开始截取,一直到结束,返回orld!
alert(s.substr(-7,3));//负数与长度相加,即str.substr(5,3),返回 wo
alert(s.substr(-7,-3));//负数与长度相加,即str.substr(5,0),返回""

split():根据指定的分隔符将字符串分割成多个子串,并将结果存储在一个数组中返回。该方法可接收两个参数:第一个是分隔符,第二个是可选的数组最大长度限制。若省略第二个参数,则返回包含所有分割后子串的完整数组。


var s = "1,23,45";
var arr1 = s.split(",");
alert(arr1);//返回数组["1","23","45"]
var arr2 = s.split(",",2);
alert(arr2);//返回数组["1","23"]

trim():用于移除字符串前置和后置的所有空白字符,并返回处理后的新字符串,原字符串不受影响。


var str1 = "  hello world ";
var str2 = str1.trim();
alert(str1);//返回"  hello world "
alert(str2);//返回"hello world"

感兴趣的朋友可以使用在线HTML/CSS/JavaScript代码运行工具:http://tools.jb51.net/code/HtmlJsRun测试上述代码运行效果。

更多关于JavaScript相关内容还可查看本站专题:《JavaScript字符与字符串操作技巧总结》、《JavaScript数组操作技巧总结》、《JavaScript遍历算法与技巧总结》、《JavaScript数学运算用法总结》、《JavaScript数据结构与算法技巧总结》、《JavaScript查找算法技巧总结》及《JavaScript错误与调试技巧总结》

希望本文所述对大家JavaScript程序设计有所帮助。

作者最新文章