为什么 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 许可协议。
暂无评论

发送评论 编辑评论


上一篇
下一篇