JavaScript 的 Substring、Substr 和 Slice 函数使用对比

发布于 2022-08-04 13:18:37 字数 3697 浏览 13 评论 0

String#substring()String#substr()函数是一个常见的混淆来源。 即使是经验丰富的 JavaScript 开发人员有时也会混淆它们。 还有第三种获取子字符串的方法, String#slice() function ,您可能会在野外看到。 在本教程中,您将了解这 3 种在 JavaScript 中获取子字符串的方法之间的区别。

String#substring()

substring() 函数 是 JavaScript 中获取子字符串的最常用方法。 它需要两个参数: indexStartindexEnd,它返回开始于的字符串部分 indexStart 并结束紧接在前面的字符 indexEnd, 例如:

const str = 'Twas the night before Christmas';

let indexStart = 0;
let indexEnd = 4;
str.substring(indexStart, indexEnd); // 'Twas'

str.substring(5, 14); // 'the night'

如果您不指定 indexEnd, 这 substring() 函数返回字符串的其余部分,从 indexStart.

str.substring(5); // 'the night before Christmas'

substring() 函数在极端情况下有一些古怪的行为:

  • 如果 indexStart 或者 indexEnd 小于 0,则视为 0。
  • 如果 indexEnd < indexStart,两者互换。

例如, substring(4, -1) 相当于 substring(4, 0),这又等价于 substring(0, 4) 如下所示。

str.substring(4, -1); // 'Twas'

String#substr()

substr() 函数 也很常见,但在 Mozilla 的文档 。 在编写新代码时不应该使用它,但你可能会在现有的 JavaScript 项目中看到它。

substring()substr() 之间的关键区别就是它 substr() 有不同的第二个参数。 第一个参数 substr()start,第二个是 length,例如:

const str = 'Twas the night before Christmas';

let start = 0;
let length = 4;
// If `start === 0`, `substr()` and `substring()` are equivalent
str.substr(start, length); // 'Twas'

str.substr(5, 9); // 'the night'
'the night'.length; // 9

不像 substring(),你可以调用 substr() 带负的 start 参数,这将使 substr() 从字符串的末尾开始计数,而不是开头。 例如:

const str = 'Twas the night before Christmas';

let start = -9;
let length = 9;
str.substr(start, length); // 'Christmas'

'Christmas'.length; // 9

String#slice()

slice() 功能 不如 substring()substr(),但是,它兼具两者的优点 substring()substr(),喜欢 substring(), 这 slice() 函数将开始和结束索引作为参数,不被视为遗留函数。 喜欢 substr(), 这 slice() 函数支持负索引。 例如:

const str = 'Twas the night before Christmas';

str.slice(0, 4); // Twas
str.slice(5, 14); // the night
str.slice(-16, -10); // before
str.slice(-9); // Christmas

slice() 函数似乎是 3 个中的明显赢家:

  • 不被视为 遗留功能
  • 支持负参数
  • 减少名称混淆:没有 String#splice() 这个函数

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击“接受”或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。