JS 字符串常用方法及使用方式

167 阅读21分钟

JavaScript中的字符串方法进行分类可以帮助更好地理解和记忆它们的用途。以下是这些方法的分类:

1. 检索和位置查找

这类方法用于查找字符串中的字符或子字符串的位置,或者进行某种形式的匹配。

indexOf()

indexOf() 方法用于在字符串中搜索指定的子字符串,并返回该子字符串首次出现的位置的索引。如果未找到子字符串,则返回 -1

基本语法

const index = str.indexOf(searchValue, fromIndex);
  • searchValue: 要搜索的子字符串。
  • fromIndex(可选): 开始搜索的起始位置的索引。如果省略,搜索将从字符串的开头(索引0)开始。如果提供的索引值大于或等于字符串的长度,返回 -1,表示搜索不会执行。

查找子字符串的位置

const str = "Hello, world!";
const index = str.indexOf("world");
console.log(index); // 输出: 7

在这个示例中,indexOf() 方法被用来查找子字符串 "world" 在字符串 str 中的位置。由于 "world" 首次出现在索引7,方法返回 7

查找不存在的子字符串

const str = "Hello, world!";
const index = str.indexOf("JavaScript");
console.log(index); // 输出: -1

这个示例查找子字符串 "JavaScript" 在字符串 str 中的位置。由于 "JavaScript" 不在字符串中,方法返回 -1

指定从特定索引开始搜索

const str = "Hello, world! Hello, universe!";
const index = str.indexOf("Hello", 10);
console.log(index); // 输出: 19

在这个示例中,indexOf() 方法从索引 10 开始搜索子字符串 "Hello"。由于字符串中第二个 "Hello" 首次出现在索引19,方法返回 19

需要注意的是

  • indexOf() 方法区分大小写。例如,搜索 "hello" 和 "Hello" 将得到不同的结果,除非它们完全匹配。
  • 如果 searchValue 是空字符串,indexOf() 将始终返回 fromIndex 的值,或者如果未指定 fromIndex,则返回 0。这是因为空字符串被认为在任何字符串中的任何位置都存在

lastIndexOf()

lastIndexOf() 方法用于在字符串中从后向前搜索指定的子字符串,并返回该子字符串最后一次出现的位置的索引。如果未找到子字符串,则返回 -1

基本语法

const index = str.lastIndexOf(searchValue, fromIndex);
  • searchValue: 要搜索的子字符串。
  • fromIndex(可选): 开始搜索的起始位置的索引。如果省略,搜索将从字符串的末尾开始。如果提供的索引值大于字符串的长度,则搜索从字符串的末尾开始。

查找子字符串的最后一个位置

const str = "Hello, world! Hello, universe!";
const index = str.lastIndexOf("Hello");
console.log(index); // 输出: 19

在这个示例中,lastIndexOf() 方法被用来查找子字符串 "Hello" 在字符串 str 中的最后一个位置。由于 "Hello" 最后一次出现在索引19,方法返回 19

查找不存在的子字符串

const str = "Hello, world!";
const index = str.lastIndexOf("JavaScript");
console.log(index); // 输出: -1

这个示例查找子字符串 "JavaScript" 在字符串 str 中的位置。由于 "JavaScript" 不在字符串中,方法返回 -1

指定从特定索引开始向前搜索

const str = "Hello, world! Hello, universe!";
const index = str.lastIndexOf("Hello", 10);
console.log(index); // 输出: 0

在这个示例中,lastIndexOf() 方法从索引 10 开始向前搜索子字符串 "Hello"。由于字符串中第一个 "Hello" 首次出现在索引0,方法返回 0

需要注意的是

  • lastIndexOf() 方法区分大小写。例如,搜索 "hello" 和 "Hello" 将得到不同的结果,除非它们完全匹配。
  • 如果 searchValue 是空字符串,lastIndexOf() 将始终返回 fromIndex 的值,或者如果未指定 fromIndex,则返回字符串的长度。这是因为空字符串被认为在任何字符串中的任何位置都存在。

search()

search() 方法用于在字符串中搜索指定的正则表达式,并返回第一个匹配项的索引。如果没有找到匹配项,则返回 -1

基本语法

const index = str.search(regexp);
  • regexp: 一个正则表达式对象。如果传递的是一个非正则表达式对象,则它会被隐式转换为正则表达式对象。

查找字符串中的数字

const str = "Hello, world! 123";
const index = str.search(/\d+/);  // 查找连续的数字
console.log(index); // 输出: 13

在这个示例中,search() 方法被用来查找字符串中第一次出现的连续数字。由于数字 123 开始于索引 13,方法返回 13

查找不存在的模式

const str = "Hello, world!";
const index = str.search(/JavaScript/);
console.log(index); // 输出: -1

这个示例查找单词 "JavaScript" 在字符串 str 中的位置。由于字符串中不包含 "JavaScript",方法返回 -1

需要注意的是

  • search() 方法不执行全局匹配,它将忽略正则表达式中的 g 标志,并且总是从字符串的开始位置查找。
  • search() 方法返回的是匹配到的第一个索引位置,不返回匹配的内容。如果需要获取匹配的内容,可以使用 match() 方法。
  • 正则表达式可以包含任何模式,如字面量、字符类、边界等。

match()

match() 方法用于在字符串中搜索与正则表达式匹配的结果。它返回一个数组,包含了匹配的结果;如果没有找到匹配,则返回 null

基本语法

const matches = str.match(regexp);
  • regexp: 一个正则表达式对象。如果传递的是一个非正则表达式对象(如字符串),它会被隐式转换为正则表达式对象。

查找字符串中的所有数字

const str = "Your order numbers are 123, 456, and 789.";
const matches = str.match(/\d+/g);  // 使用全局搜索标志 'g'
console.log(matches); // 输出: ['123', '456', '789']

在这个示例中,match() 方法被用来查找字符串中所有的连续数字。使用正则表达式的全局标志 g,方法返回一个包含所有匹配结果的数组。

查找单个匹配(不使用全局标志)

const str = "Hello, world! 123";
const match = str.match(/\d+/);  // 没有使用全局搜索标志 'g'
console.log(match); // 输出: ['123', index: 13, input: 'Hello, world! 123', groups: undefined]

在这个示例中,由于没有使用全局标志 gmatch() 方法返回的数组包含了更多的信息:

  • 第一个元素是匹配的文本。
  • index 属性表示匹配文本开始的位置。
  • input 属性包含原始字符串。
  • groups 属性包含命名捕获组的匹配(如果有的话)。

需要注意的是

  • 如果正则表达式包含全局标志 gmatch() 将返回一个包含所有匹配的数组,不包括分组详情。
  • 如果正则表达式不包含全局标志 gmatch() 返回的数组将包含第一个完整匹配及其相关的捕获组。
  • 如果没有找到匹配,match() 返回 null

2. 修改和替换

这类方法用于修改字符串或替换字符串中的某些部分。

replace()

replace() 方法用于在字符串中搜索与指定模式匹配的子串,并用替换字符串或通过函数返回的字符串替换它们。这个方法返回一个新字符串,原始字符串不会被修改。

基本语法

const newStr = str.replace(regexp|substr, newSubstr|function)
  • regexp|substr: 可以是一个正则表达式或一个子字符串。如果是正则表达式,可以使用标志如 g 来指定全局替换;否则,只替换第一个匹配项。
  • newSubstr|function: 替换文本可以是一个字符串或一个函数。如果是字符串,可以包含特殊的替换模式,如 $1$2 等,代表正则表达式中的捕获组。如果是函数,该函数的返回值将作为替换字符串。

使用字符串替换

const str = "Visit Microsoft!";
const newStr = str.replace("Microsoft", "Google");
console.log(newStr); // 输出: "Visit Google!"

在这个示例中,replace() 方法查找字符串 "Microsoft" 并将其替换为 "Google"

使用正则表达式进行全局替换

const str = "Apples are round, and apples are juicy.";
const newStr = str.replace(/apples/gi, "oranges");
console.log(newStr); // 输出: "Oranges are round, and oranges are juicy."

这里使用了正则表达式 /apples/gi,其中 g 表示全局替换,i 表示不区分大小写,从而替换了所有出现的 "apples"

使用函数进行动态替换

const str = "John Smith";
const newStr = str.replace(/(\w+) (\w+)/, function(match, p1, p2) {
    return p2 + ', ' + p1;
});
console.log(newStr); // 输出: "Smith, John"

在这个示例中,replace() 方法使用一个函数来动态构建替换字符串。函数接收整个匹配项和各个捕获组作为参数,返回 "Smith, John"

需要注意的是

  • 如果第一个参数是字符串而不是正则表达式,那么 replace() 只会替换第一个匹配项。
  • 特殊替换模式(如 $& 表示整个匹配项,$1$2, ... 表示对应的捕获组)只在替换字符串是字符串时有效。
  • 替换函数可以接收额外的参数,如匹配项的偏移量和原始字符串。

concat()

concat() 方法用于将一个或多个字符串连接成一个新的字符串,并返回这个新字符串。原始字符串不会被修改。

基本语法

const newStr = str1.concat(str2, str3, ..., strN);
  • str1, str2, ..., strN: 要连接的字符串。可以连接任意数量的字符串。

连接两个字符串

const greeting = "Hello, ";
const name = "Alice";
const message = greeting.concat(name);
console.log(message); // 输出: "Hello, Alice"

在这个示例中,concat() 方法被用来将 "Hello, ""Alice" 连接成一个新的字符串 "Hello, Alice"

连接多个字符串

const string1 = "I ";
const string2 = "like ";
const string3 = "JavaScript.";
const sentence = string1.concat(string2, string3);
console.log(sentence); // 输出: "I like JavaScript."

这里,concat() 方法连接了三个字符串,形成了完整的句子 "I like JavaScript."

替代方法

虽然 concat() 方法是有效的,但在现代JavaScript开发中,模板字符串(使用反引号 ``)提供了一种更为强大和灵活的方式来构建字符串,特别是当涉及到变量和表达式时:

const name = "Alice";
const message = `Hello, ${name}`;
console.log(message); // 输出: "Hello, Alice"

这种方法不仅代码更清晰,而且可以直接嵌入变量和表达式,使得字符串的构建更加直观和强大。

需要注意的是

  • concat() 方法可以接受任意数量的参数,这些参数都将按顺序连接到调用它的字符串后面。
  • 尽管 concat() 方法很方便,但在实际应用中,使用加号 (+) 运算符来连接字符串通常更常见,因为这样代码更简洁易读。

slice()

slice() 方法用于提取字符串的一部分并返回新的字符串,原始字符串不会被修改。这个方法非常适用于从字符串中提取子字符串。

基本语法

const newStr = str.slice(startIndex, endIndex);
  • startIndex: 开始提取字符的位置的索引。如果是负数,则表示从字符串末尾开始的偏移量。
  • endIndex(可选): 在该位置结束提取字符(不包括该位置的字符)。如果省略,slice() 会一直提取到字符串末尾。如果是负数,则表示从字符串末尾开始的偏移量。

提取字符串的一部分

const str = "Hello, world!";
const subStr = str.slice(7, 12);
console.log(subStr); // 输出: "world"

在这个示例中,slice() 方法从索引7开始提取字符,到索引12结束(不包括索引12的字符),因此结果是 "world"

使用负数索引

const str = "Hello, world!";
const subStr = str.slice(-6, -1);
console.log(subStr); // 输出: "world"

这里,slice() 方法使用负数索引,从字符串末尾向前数6个位置开始提取,到末尾向前数1个位置结束,结果同样是 "world"

需要注意的是

  • 如果 startIndex 大于字符串的长度,slice() 返回空字符串。
  • slice() 方法的 endIndex 不包括在提取的子字符串中。
  • 如果 endIndex 小于 startIndexslice() 返回空字符串。

split()

split() 方法用于将一个字符串分割成子字符串数组,根据指定的分隔符进行分割,并返回结果数组。原始字符串不会被修改。

基本语法

const newArray = str.split(separator, limit);
  • separator: 分隔符,可以是一个字符串或正则表达式。如果省略或为 undefined,则字符串将被分割成单个字符的数组。
  • limit: 可选参数,用于限制结果数组的长度。如果提供了 limit 参数,则返回的数组最多包含 limit 个元素。超出部分的字符串将被忽略。

示例

const str = "apple,banana,orange";
const fruits = str.split(",");
console.log(fruits); // 输出: ["apple", "banana", "orange"]

在这个示例中,字符串 "apple,banana,orange" 被根据逗号分隔符分割成了一个包含三个元素的数组。

使用正则表达式作为分隔符

const sentence = "Hello world. How are you?";
const words = sentence.split(/\s+/);
console.log(words); // 输出: ["Hello", "world.", "How", "are", "you?"]

这里,我们使用正则表达式 /\s+/ 作为分隔符,它匹配一个或多个空白字符(空格、制表符、换行符等),将句子分割成了单词数组。

限制结果数组的长度

const str = "one,two,three,four,five";
const parts = str.split(",", 3);
console.log(parts); // 输出: ["one", "two", "three"]

在这个示例中,我们限制了结果数组的长度为 3,所以只有前三个子字符串被包含在结果数组中。

需要注意的是

  • 如果指定的分隔符在字符串中找不到,则返回包含原始字符串的单个元素的数组。
  • 如果分隔符为空字符串或者省略了分隔符参数,则返回一个包含原始字符串中每个字符的数组。

substr()

substr() 方法用于从字符串中提取指定长度的子字符串,从指定的位置开始提取。这个方法类似于 substring() 方法,但不同之处在于第二个参数指定的是要提取的子字符串的长度,而不是结束位置的索引。

基本语法

const substring = str.substr(startIndex, length);
  • startIndex: 开始提取的位置,可以是正数或负数。
  • length: 要提取的子字符串的长度。

示例

const str = "Hello, world!";
const sub = str.substr(7, 5);
console.log(sub); // 输出: "world"

在这个示例中,substr() 方法从索引为 7 的位置开始提取长度为 5 的子字符串,因此提取的结果是 "world"

负数索引

const str = "Hello, world!";
const sub = str.substr(-6, 5);
console.log(sub); // 输出: "world"

在这个示例中,负数索引 -6 表示从字符串末尾往前数的第 6 个字符开始提取,然后提取长度为 5 的子字符串,结果仍然是 "world"

省略第二个参数

const str = "Hello, world!";
const sub = str.substr(7);
console.log(sub); // 输出: "world!"

如果省略第二个参数,则提取从指定位置开始直到字符串末尾的所有字符。在这个示例中,从索引为 7 的位置开始提取,直到字符串末尾,结果是 "world!"

需要注意的是

  • 如果 startIndex 是负数且绝对值大于字符串的长度,则 substr() 方法将从索引为 0 的位置开始提取。
  • 如果 length 参数被省略或大于字符串的长度减去 startIndex 的值,则提取从 startIndex 开始到字符串末尾的所有字符。

substring()

substring() 方法用于从字符串中提取指定范围的子字符串,并返回这个子字符串。与 substr() 方法不同,substring() 的第二个参数指定的是子字符串的结束位置的索引,而不是要提取的长度。

基本语法

const substring = str.substring(startIndex, endIndex);
  • startIndex: 开始提取的位置,可以是正数或负数。
  • endIndex: 结束提取的位置,可以是正数或负数。提取的子字符串包含 startIndex 处的字符,但不包含 endIndex 处的字符。

示例

const str = "Hello, world!";
const sub = str.substring(7, 12);
console.log(sub); // 输出: "world"

在这个示例中,substring() 方法从索引为 7 的位置开始提取到索引为 12 的位置之前的所有字符,结果是 "world"

负数索引

const str = "Hello, world!";
const sub = str.substring(-6, 12);
console.log(sub); // 输出: "Hello, world"

在这个示例中,负数索引 -6 被视为 0,所以从字符串的起始位置开始提取,直到索引为 12 的位置之前的所有字符。

省略第二个参数

const str = "Hello, world!";
const sub = str.substring(7);
console.log(sub); // 输出: "world!"

如果省略了第二个参数,则提取从指定位置开始到字符串末尾的所有字符。在这个示例中,从索引为 7 的位置开始提取,直到字符串末尾,结果是 "world!"

需要注意的是

  • 如果 startIndexendIndex 是负数且绝对值大于字符串的长度,则它们被视为 0
  • 如果 startIndex 大于 endIndex,则 substring() 方法会交换这两个参数的值。

3. 大小写转换

这类方法用于转换字符串的大小写。

toLowerCase()

toLowerCase() 方法用于将字符串中的所有字母转换为小写,并返回转换后的新字符串。原始字符串不会被修改。

基本语法

const lowerCaseStr = str.toLowerCase();

示例

const str = "Hello, World!";
const lowerCase = str.toLowerCase();
console.log(lowerCase); // 输出: "hello, world!"

在这个示例中,toLowerCase() 方法将字符串 "Hello, World!" 中的所有字母转换为小写,结果是 "hello, world!"

需要注意的是

  • toLowerCase() 方法不会改变字符串中的非字母字符,如数字、符号等。
  • 如果调用 toLowerCase() 方法时,字符串是一个已经全是小写的字符串,则返回的字符串与原始字符串相同。

toUpperCase()

toUpperCase() 方法用于将字符串中的所有字母转换为大写,并返回转换后的新字符串。原始字符串不会被修改。

基本语法

const upperCaseStr = str.toUpperCase();

示例

const str = "Hello, World!";
const upperCase = str.toUpperCase();
console.log(upperCase); // 输出: "HELLO, WORLD!"

在这个示例中,toUpperCase() 方法将字符串 "Hello, World!" 中的所有字母转换为大写,结果是 "HELLO, WORLD!"

需要注意的是

  • toUpperCase() 方法不会改变字符串中的非字母字符,如数字、符号等。
  • 如果调用 toUpperCase() 方法时,字符串是一个已经全是大写的字符串,则返回的字符串与原始字符串相同。

toLocaleLowerCase()

toLocaleLowerCase() 方法用于将字符串中的所有字母转换为小写,根据特定区域设置,返回转换后的新字符串。与 toLowerCase() 方法不同的是,toLocaleLowerCase() 方法会考虑特定语言环境中字母的大小写转换规则。

基本语法

const lowerCaseStr = str.toLocaleLowerCase([locales]);
  • locales:可选参数,指定要使用的地区设置或语言环境。

示例

const str = "HELLO, WORLD!";
const lowerCase = str.toLocaleLowerCase();
console.log(lowerCase); // 输出: "hello, world!"

在这个示例中,toLocaleLowerCase() 方法将字符串 "HELLO, WORLD!" 中的所有字母转换为小写,考虑默认的语言环境,结果是 "hello, world!"

需要注意的是

  • 如果未提供 locales 参数,toLocaleLowerCase() 方法将使用默认的地区设置。
  • 地区设置会影响特定语言环境中字母的大小写转换规则,例如土耳其语中的 I 转换为小写时为 ı

toLocaleUpperCase()

toLocaleUpperCase() 方法用于将字符串中的所有字母转换为大写,根据特定区域设置,返回转换后的新字符串。与 toUpperCase() 方法不同的是,toLocaleUpperCase() 方法会考虑特定语言环境中字母的大小写转换规则。

基本语法

const upperCaseStr = str.toLocaleUpperCase([locales]);
  • locales:可选参数,指定要使用的地区设置或语言环境。

示例

const str = "hello, world!";
const upperCase = str.toLocaleUpperCase();
console.log(upperCase); // 输出: "HELLO, WORLD!"

在这个示例中,toLocaleUpperCase() 方法将字符串 "hello, world!" 中的所有字母转换为大写,考虑默认的语言环境,结果是 "HELLO, WORLD!"

需要注意的是

  • 如果未提供 locales 参数,toLocaleUpperCase() 方法将使用默认的地区设置。
  • 地区设置会影响特定语言环境中字母的大小写转换规则,例如土耳其语中的 i 转换为大写时为 İ

4. 去除空白

这类方法用于处理字符串的首尾空白字符。

trim()

trim() 方法用于移除字符串两端的空格(包括空格、制表符和换行符),并返回处理后的新字符串。

基本语法

const trimmedStr = str.trim();

示例

const str = "   Hello, world!   ";
const trimmed = str.trim();
console.log(trimmed); // 输出: "Hello, world!"

在这个示例中,trim() 方法移除了字符串两端的空格,返回了 "Hello, world!"

需要注意的是

  • trim() 方法只移除字符串两端的空格,不会影响字符串中间的空格。
  • 如果字符串为空,或者只包含空白字符(空格、制表符、换行符等),则 trim() 方法会返回一个空字符串

5. 字符和编码

这类方法涉及字符与其Unicode编码之间的转换。

charAt()

charAt() 方法用于获取字符串中指定位置的字符,并返回该字符。字符串中的字符位置从0开始索引。

基本语法

const char = str.charAt(index);
  • index:要获取字符的位置索引,必须是一个介于 0 到字符串长度减一之间的整数。如果指定的索引超出字符串长度范围,则返回空字符串。

示例

const str = "Hello, world!";
const charAtIndex4 = str.charAt(4);
console.log(charAtIndex4); // 输出: "o"

在这个示例中,charAt(4) 获取了字符串 "Hello, world!" 中索引为4的字符,即第5个字符,结果是 "o"

需要注意的是

  • 如果索引超出了字符串的长度范围,charAt() 方法会返回一个空字符串。
  • 字符串中的字符位置从0开始索引,即第一个字符的索引为0,第二个字符的索引为1,以此类推。

charCodeAt()

charCodeAt() 方法用于返回字符串中指定位置的字符的 Unicode 编码。字符的位置索引从0开始。

基本语法

const unicode = str.charCodeAt(index);
  • index:要获取字符的位置索引,必须是一个介于 0 到字符串长度减一之间的整数。如果指定的索引超出字符串长度范围,则返回 NaN

示例

const str = "Hello, world!";
const unicodeAtIndex4 = str.charCodeAt(4);
console.log(unicodeAtIndex4); // 输出: 111

在这个示例中,charCodeAt(4) 获取了字符串 "Hello, world!" 中索引为4的字符的 Unicode 编码,即第5个字符 "o"Unicode 编码是 111

需要注意的是

  • 如果索引超出了字符串的长度范围,charCodeAt() 方法会返回 NaN(非数字)。
  • 字符串中的字符位置从0开始索引,即第一个字符的索引为0,第二个字符的索引为1,以此类推。

fromCharCode()

fromCharCode()String 对象的静态方法之一,用于创建一个包含指定 Unicode 码点对应字符的字符串。

基本语法

String.fromCharCode(codePoint1[, codePoint2[, ...[, codePointN]]])
  • codePoint1, codePoint2, ..., codePointN:一个或多个 Unicode 码点(整数),代表要包含在字符串中的字符。

示例

const str = String.fromCharCode(72, 101, 108, 108, 111);
console.log(str); // 输出: "Hello"

在这个示例中,String.fromCharCode(72, 101, 108, 108, 111) 创建了一个包含指定 Unicode 码点对应字符的字符串,结果是 "Hello"

需要注意的是

  • fromCharCode() 方法可以接受一个或多个 Unicode 码点作为参数,返回一个由对应字符组成的字符串。
  • 如果提供的码点不是整数,则会被截断为整数。
  • 如果传入的码点不是有效的 Unicode 码点,则会被忽略。
  • 如果没有提供任何参数,则返回空字符串。

6. 本地化比较

这类方法用于根据本地环境比较字符串。

localeCompare()

localeCompare() 方法用于比较两个字符串,并返回一个指示字符串在排序顺序上的位置关系的数字。该方法可以考虑特定地区设置下的排序规则。

基本语法

const result = str1.localeCompare(str2, locales, options);
  • str1:要比较的第一个字符串。
  • str2:要比较的第二个字符串。
  • locales:可选参数,指定要使用的地区设置或语言环境。
  • options:可选参数,一个对象,包含比较选项,比如 sensitivityignorePunctuation

返回值

  • 如果 str1 在字典排序中排在 str2 之前,则返回一个负数(通常是负的 1 或负的字符串长度)。
  • 如果 str1str2 在字典排序中相等,则返回 0
  • 如果 str1 在字典排序中排在 str2 之后,则返回一个正数(通常是正的 1 或字符串长度)。

示例

const str1 = "apple";
const str2 = "banana";
const result = str1.localeCompare(str2);
console.log(result); // 输出: -1

在这个示例中,localeCompare() 方法比较了字符串 "apple""banana" 的位置关系。由于 "apple" 在字典排序中排在 "banana" 之前,所以返回值是负数 -1

需要注意的是

  • localeCompare() 方法根据指定的地区设置或语言环境来确定字符串的排序顺序。

7. 基本转换

这类方法用于将字符串对象转换为其基本的字符串表示形式。

toString()

toString() 方法用于将一个对象转换为字符串表示形式,并返回该字符串。

基本语法

const str = object.toString();

示例

const number = 42;
const str = number.toString();
console.log(str); // 输出: "42"

在这个示例中,toString() 方法将数字 42 转换为字符串形式,结果是字符串 "42"

需要注意的是

  • 对于大多数 JavaScript 对象,toString() 方法会返回一个表示该对象的字符串。
  • 对于原始值,如数字、布尔值和字符串,toString() 方法会返回相应的字符串表示形式。
  • 对于数组,toString() 方法会返回数组的元素以逗号分隔的字符串形式。
  • 对于日期对象,toString() 方法会返回一个表示日期和时间的字符串。
  • 对于自定义对象,通常需要重写 toString() 方法,以便返回对象的自定义字符串表示形式。

valueOf()

valueOf() 方法用于返回指定对象的原始值。JavaScript 中的大多数对象都具有 valueOf() 方法,它们会在某些情况下自动调用,例如在与数值进行算术运算时。

基本语法

const value = object.valueOf();

示例

const number = new Number(42);
const value = number.valueOf();
console.log(value); // 输出: 42

在这个示例中,valueOf() 方法返回了 Number 对象的原始值,即数字 42

需要注意的是

  • 对于原始值(例如数字、字符串、布尔值),valueOf() 方法会返回该值的原始值。
  • 对于日期对象,valueOf() 方法会返回日期的时间戳(以毫秒为单位)。
  • 对于自定义对象,通常需要重写 valueOf() 方法,以便返回对象的自定义原始值。

这种分类方法可以帮助开发者快速找到适合特定需求的字符串操作方法,并更有效地利用JavaScript提供的丰富功能来处理字符串数据。