我知道 substr(start[, length])
之间有什么区别和 substring(start[, end])
.这是解决例如在这个较早的问题中:What is the difference between substr and substring?
但是为什么他们在 substring
已经存在的时候添加 substr
?我正在寻找有关此决定历史的信息。
我发现 substring
从一开始就存在,然后在 Ecmascript 第 3 版中“突然”出现,它们有两个不同的函数,可以用不同的参数实现完全相同的事情。为什么?
如果没有十年前参与 ECMA 的人参与权衡,我认为我们无法确定地回答这个问题,但是我们可以推断出一些事情。
substring
请求开始的索引(从 0 开始),以及可选的结束索引(同样从 0 开始)。
substr
请求开始的索引(从 0 开始)和长度。这使得在某些情况下使用起来更简单,例如如果你想从第一个“s”中获取 2 个字符,你只需指定 2 作为长度,而不必先计算第一个“s”的索引,然后将其加 2,然后将两个位置传递给 子字符串
。
正如评论中指出的那样,substr
允许负起始位置。
可以说,substr
是一个更好的实现。因此,这很可能就是添加它的原因。
至于为什么两者都存在的问题,那可能是为了向后兼容。因为 Javascript 运行在各种各样的浏览器中(现在还有其他地方),在由多个组织维护的运行时中,没有简单的方法来弃用或消除任何东西。将它留在那里并向语言中添加更多内容会更容易。旧代码仍然有效,新代码有更好的选项可供使用。