本文系统介绍 JavaScript 中 String 对象的常用方法,涵盖字符访问(charAt、charCodeAt)、字符串拼接与提取(concat、slice、substring、substr)、位置检索(indexOf、lastIndexOf)、大小写转换及 trim 方法。详细解析各方法的参数行为、返回值及负数处理差异,帮助开发者准确掌握字符串处理技巧。
字符访问方法
1. 字符访问方法
1.1 charAt() 方法用于返回字符串中指定索引位置的字符。
var question = "Do you like JavaScript?";
alert(question.charAt(5)); //"u"
以字符串 "Do you like JavaScript?" 为例,其长度为 23,索引范围从 0 到 22。当查询索引为 5 的字符时,返回结果为 "u"。
1.2 charCodeAt() 方法用于返回字符串中指定索引位置字符的 Unicode 编码值。
var question = "Do you like JavaScript?";
alert(question.charCodeAt(5)); //"117"
在上述字符串中,索引 5 处的字符 "u" 对应的 Unicode 编码值为 117。
charAt() 和 charCodeAt() 均针对单个字符进行操作,前者返回字符本身,后者返回字符编码。
字符串操作方法
2. 字符串操作方法
本节介绍用于创建新字符串的方法,主要包括 concat()、slice()、substring() 和 substr()。
concat() 通过拼接多个字符串生成新字符串,而 slice()、substring() 和 substr() 则通过提取原字符串的子串来生成新字符串。
上述四种方法均不会修改原始字符串,而是返回一个新的字符串对象。
2.1 concat() 方法用于将一个或多个字符串拼接在一起,并返回拼接后的新字符串,原始字符串保持不变。
concat() 方法支持接收一个或多个参数。
当 concat() 仅接收一个参数时:
var love = "I love ";
var result = love.concat("you");
alert(result); //"I love you"
alert(love); //"I love "
例如,变量 love 调用 concat() 方法并传入 "you",返回结果为 "I love you",而变量 love 本身的值仍为 "I love ",未发生改变。
当 concat() 接收多个参数时:
var love = "I love ";
var result = love.concat("you"," very"," much","!");
alert(result); //"I love you very much!"
alert(love); //"I love "
在实际开发中,通常更倾向于使用 + 操作符进行字符串拼接,因其语法更为简洁。
2.2 slice()、substring() 和 substr() 方法通过提取原始字符串的部分或全部内容来创建新字符串,返回提取后的结果,且不改变原始字符串。
这三种方法均可接受一个或两个数字参数,参数可以是正值,也可以是负值。
2.2.1 当参数为正值时
传入两个参数的情况:
对于 slice() 和 substring(),第一个参数指定提取的起始位置(包含该位置的字符),第二个参数指定提取的结束位置(不包含该位置的字符)。
对于 substr(),第一个参数指定提取的起始位置(包含该位置的字符),第二个参数指定提取的字符个数。
var hello = "I love JavaScript!";
alert(hello.slice(7,11)); //"Java"
alert(hello.substring(7,11)); //"Java"
alert(hello.substr(7,11)); //"JavaScript!"
以字符串 "I love JavaScript!" 为例,其长度为 18,索引范围从 0 到 17。索引 7 处的字符为 "J",索引 11 处的字符为 "S"。
调用 slice() 和 substring() 时,从索引 7 开始(包含 "J")提取至索引 11(不包含 "S"),结果为 "Java"。调用 substr() 时,从索引 7 开始(包含 "J")提取 11 个字符,结果为 "JavaScript!"。
传入一个参数的情况:
当参数为正值且仅传入一个参数时,slice()、substring() 和 substr() 的行为一致,即从指定索引位置开始提取,直至原始字符串的末尾(包含最后一个字符)。
var hello = "I love JavaScript!";
alert(hello.slice(7)); //"JavaScript!"
alert(hello.substring(7)); //"JavaScript!"
alert(hello.substr(7)); //"JavaScript!"
例如传入参数 7,即从索引 7(包含 "J")开始提取至字符串末尾(包含 "!")。此时,slice()、substring() 和 substr() 返回的新字符串内容相同。
2.2.2 当参数为负值时,无论是一个还是两个参数:
slice() 方法会将所有负值参数与字符串长度相加,从而转换为正索引。
substring() 方法会将所有负值参数视为 0。
substr() 方法若第一个参数为负值,则将其与字符串长度相加;若第二个参数为负值,则将其视为 0。
var hello = "I love JavaScript!";
alert(hello.slice(-11)); //"JavaScript!"
alert(hello.substring(-11)); //"I love JavaScript!"
alert(hello.substr(-11)); //"JavaScript!"
alert(hello.slice(-11,-9)); //"Ja"
alert(hello.substring(-11,-9)); //""(空字符串)
alert(hello.substr(-11,-9)); //""(空字符串)
当传入负值参数-1时,
slice() 将负值与字符串长度(18)相加,即 slice(-11) 等效于 slice(7),从索引 7 开始提取,结果为 "JavaScript!"。
substring() 将负值转换为 0,即 substring(-11) 等效于 substring(0),从索引 0 开始提取,结果为 "I love JavaScript!"。
substr() 将第一个负值与字符串长度相加,即 substr(-11) 等效于 substr(7),从索引 7 开始提取,结果为 "JavaScript!"。
当传入两个负值参数 -11 和 -9 时:
slice() 将所有负值与字符串长度相加,即 slice(-11,-9) 等效于 slice(7,9),结果为 "Ja"。
substring() 将所有负值转换为 0,即 substring(-11,-9) 等效于 substring(0,0),起始和结束索引均为 0,返回空字符串。
substr() 将第一个负值与字符串长度相加,第二个负值转换为 0,即 substr(-11,-9) 等效于 substr(7,0),从索引 7 开始提取 0 个字符,返回空字符串。
字符串位置检索方法
3. 字符串位置检索方法
indexOf() 和 lastIndexOf() 方法用于返回指定子字符串在原始字符串中首次出现的索引位置。
indexOf() 从字符串开头向后搜索,lastIndexOf() 从字符串末尾向前搜索。
这两个方法均接受一个必选参数,即要检索的子字符串。
var test = "balala balala balala";
alert(test.indexOf("a")); //"1"
alert(test.lastIndexOf("a")); //"19"
例如,在字符串 "balala balala balala" 中,indexOf() 向后检索子字符串 "a",首次出现的位置为 1;lastIndexOf() 向前检索子字符串 "a",首次出现的位置(从后往前数的第一个)为 19。
若未找到指定的子字符串,这两个方法均返回 -1。
var test = "balala balala balala";
alert(test.indexOf("h")); //"-1"
alert(test.lastIndexOf("h")); //"-1"
indexOf() 和 lastIndexOf() 还接受第二个可选参数,用于指定开始搜索的索引位置。
var test = "balala balala balala";
alert(test.indexOf("a",7)); //"8"
alert(test.lastIndexOf("a",7)); //"5"
例如,indexOf("a", 7) 从索引 7 开始向后检索 "a",首次出现的位置为 8;lastIndexOf("a", 7) 从索引 7 开始向前检索 "a",首次出现的位置为 5。
字符串大小写转换方法
4. 字符串大小写转换方法
ECMAScript 中提供四种字符串大小写转换方法:toUpperCase()、toLocaleUpperCase()、toLowerCase() 和 toLocaleLowerCase()。
toUpperCase() 和 toLowerCase() 是标准的大小写转换方法;toLocaleUpperCase() 和 toLocaleLowerCase() 则是针对特定地区语言环境优化的方法,以确保转换结果的准确性。
在不确定代码运行所处的语言环境时,使用针对地区的方法(toLocaleUpperCase/LowerCase)更为稳妥。
var test = "balala balala balala";
alert(test.toLocaleUpperCase()); //"BALALA BALALA BALALA"
alert(test.toUpperCase()); //"BALALA BALALA BALALA"
alert(test.toLocaleLowerCase()); //"balala balala balala"
alert(test.toLowerCase()); //"balala balala balala"
trim 方法
5. trim() 方法
trim() 方法会创建原始字符串的副本,并移除字符串前置和后置的所有空格,然后返回处理后的新字符串,原始字符串保持不变。
var test = " balala balala balala ";
var test1 = test.trim();
alert(test1); //"balala balala balala"
alert(test); // " balala balala balala "
alert(test1.length); //"20"
alert(test.length); //"28"
以上为 JavaScript 中 String 对象常用方法的完整介绍,希望能为您的编程工作提供有益参考。