为什么 JavaScript String 会有 slice() 和 substring() 这两个方法?

写在前面

slice()substring() 这两个方法都可以截取字符串,那么为什么会设计这两个 API 呢?

二者的区别

substring()slice() 方法几乎是相同的,但两者之间有一些微妙的区别,特别是在处理负参数的方式上。

如果 indexStart 大于 indexEndsubstring() 方法会交换两个参数,这意味着仍然会返回一个字符串。但是 slice() 方法面对这种情况会返回一个空字符串。

let text = 'Mozilla' console.log(text.substring(5, 2)) // => "zil" console.log(text.slice(5, 2)) // => ""

如果参数中的一个或两个都是负数或 NaN,则 substring() 将它们当作 0 处理。

console.log(text.substring(-5, 2)) // => "Mo" console.log(text.substring(-5, -2)) // => ""

slice() 也将 NaN 参数视为 0,但当它为负时,它会从字符串的末尾向前数,以找到索引。

console.log(text.slice(-5, 2)) // => "" console.log(text.slice(-5, -2)) // => "zil"

共存的原因

乍一看 slice()substring() 做的是同样的事情,但最大的区别在于它们如何处理负参数。

当 Netscape 2.0 首次实现 JavaScript 时,只有一个 substring() 方法。如果它的任何一个参数是负数,就会被当作 0 处理。

当 Netscape 4.0 引入 JavaScript 1.2 后,他们希望通过支持负索引来从反向遍历字符串。不过不能修改 substring() 的行为 ,因为这会破坏现有的代码的兼容性,所以只能创建一个新的函数来支持新增的功能。这个函数就是 slice(),在 ArrayString 上都实现了。

参考资料

本文作者:ADD-SP
本文链接:https://www.addesp.com/archives/1902
版权声明:本博客所有文章除特别声明外,均默认采用 CC-BY-NC-SA 4.0 许可协议。
暂无评论

发送评论 编辑评论


|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇