返回

字符串截取的“小坑”,别再犯了!

前端

字符串截取:JavaScript 中的常见错误及避免方法

在 JavaScript 中,字符串截取操作是不可避免的。虽然有 slice() 和 substring() 两个函数可以方便地完成此任务,但如果不注意,很容易犯错。

使用 slice() 和 substring() 截取字符串

slice() 函数

slice() 函数接受两个参数:起始索引和结束索引。如果只提供一个参数,则从起始索引到字符串末尾进行截取。

const str = "Hello, world!";
console.log(str.slice(7)); // "world!"

slice() 函数不会修改原字符串,而是返回一个新字符串。

substring() 函数

substring() 函数也接受两个参数:起始索引和结束索引。但与 slice() 不同,如果只提供一个参数,substring() 会从起始索引到字符串末尾进行截取。

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

substring() 函数也会返回一个新字符串,但它在遇到代理对(代理对象或代理字符串)时会将其视为一个单元,而 slice() 则视为两个单元。

常见错误

  • 截取包含特殊字符的字符串时出错。 比如中文字符,substring() 可能得到错误结果。
  • 截取起始或结束索引超出字符串长度时出错。 比如从第 10 个字符到第 20 个字符,而字符串只有 10 个字符,结果会是空字符串。
  • 截取负数索引的字符串时出错。 比如从 -1 个字符到第 5 个字符,会得到一个错误。

避免错误的方法

  • 使用正确的函数。 如果要截取包含特殊字符的字符串,请使用 slice()。
  • 确保索引在字符串长度范围内。
  • 不要使用负数索引。

示例:

const str = "Hello, world!";

// 正确的 slice() 用法:
const slicedStr = str.slice(7, 12); // "world"

// 正确的 substring() 用法:
const substringedStr = str.substring(0, 5); // "Hello"

// 错误的 slice() 用法:超出字符串长度
const errorSliceStr = str.slice(20, 25); // 空字符串

// 错误的 substring() 用法:负数索引
const errorSubstringStr = str.substring(-1, 5); // 错误

结论

字符串截取是 JavaScript 中的常见操作,但必须小心避免常见错误。遵循本文的指导,您可以确保始终获得正确的结果。

常见问题解答

  1. 为什么 slice() 和 substring() 对于特殊字符有不同的行为?

    • substring() 将代理对视为一个单元,而 slice() 视为两个单元。
  2. 如果字符串长度未知,如何安全地截取?

    • 使用 slice() 并提供一个大于字符串长度的结束索引。
  3. 我可以截取字符串的特定子字符串吗?

    • 使用 indexOf() 或 lastIndexOf() 找到子字符串的起始索引,然后使用 slice() 或 substring() 进行截取。
  4. 如果字符串中没有指定字符,如何截取?

    • 使用 slice() 或 substring() 并提供一个不存在的索引,它将返回空字符串。
  5. 如何从字符串中删除特定字符或字符序列?

    • 使用 slice() 或 substring() 并排除要删除的字符或序列。