为啥有两种不同的方法 slice() 和 substring()?

Posted

技术标签:

【中文标题】为啥有两种不同的方法 slice() 和 substring()?【英文标题】:Why two different methods slice() & substring()?为什么有两种不同的方法 slice() 和 substring()? 【发布时间】:2013-08-15 23:06:00 【问题描述】:
var name="nameSomnath";//remove name

我可以使用slice()

var result = name.slice( 4 );

substring()也可以这样做

var result = name.substring( 4 );

那么是什么让它们与众不同。 我已经看到链接Here 详细说明了区别。但是我们可以使用任何一种方法来做同样的事情,即slice()substring()。那么为什么需要有两种方法。

【问题讨论】:

可以参考这个***.com/questions/2243824/… 【参考方案1】:

切片

.slice(开始,结束)

不包括给定的结束索引元素


substr

.substr(开始,长度)

start 位置到 no 的摘录。字符数。指定


子字符串

.substring(开始,结束)

提取两个指定索引之间之间的字符


【讨论】:

关于substrsubstring***.com/a/22439570/2557900的更多信息 slice() not 返回一个数组:w3schools.com/jsref/jsref_slice_string.asp Charles,这是我对数组一的混淆,应该早就更新了。感谢您指出!【参考方案2】:

尽管表面上看起来 slicesubstring 做同样的事情,但最大的区别在于它们处理否定论点的方式。

在 Netscape 2.0 中首次创建 javascript 时,只有一个 substring 方法。如果其中任何一个参数为负数,则将它们视为 0。

当 JavaScript 1.2 与 Netscape 4.0 一起引入时,他们希望添加允许负索引表示距字符串末尾的距离的行为。他们无法更改 substring 以具有此新行为,因为它会破坏与预期负索引被视为 0 的脚本的向后兼容性,因此他们必须创建一个新函数来支持添加的功能。这个函数被称为slice,并在ArrayString上实现。

另一个较小的区别是substring 的参数顺序无关紧要,因此substring(1, 4)substring(4, 1) 相同。对于slice,顺序确实很重要,所以slice(4, 1) 只会产生一个空字符串。

【讨论】:

【参考方案3】:

使它们不同的一项是您省略的第二个参数

slice:第二个参数是取范围的结束索引(不包括)。 substr:第二个参数是从第一个参数指定的索引中获取的字符串长度

您能否在 string 实例上完全复制一种方法的行为与另一种方法的行为?是的。为什么他们选择将两者都包括在内可能已经被历史遗忘了。我的猜测是熟悉。我敢打赌,很少有框架有slicestrings,但有很多框架有substr

【讨论】:

【参考方案4】:

slice 中,参数是第一个索引和最后一个索引。在substr 中,参数是第一个索引和长度。

【讨论】:

【参考方案5】:

编辑: 糟糕——我错了——字符串也有切片方法!我将再次删除我的帖子-抱歉没有正确研究!!!或者,好吧,可能不会删除它,但至少在其中留下这个更正。 ;-)

您正在查看不同类的两种方法。 substr 只能应用于String-objects,而slice 属于Array-objects。它们可能看起来与 yo 相似,但在内部它们以不同的方式工作,因为它们处理的数据不同。

顺便说一句,这 不是 一个 jQuery 而是一个普通的 JavaScript 问题。 ;-)

【讨论】:

以上是关于为啥有两种不同的方法 slice() 和 substring()?的主要内容,如果未能解决你的问题,请参考以下文章

为啥有两种方法可以在 Git 中取消暂存文件?

为啥有两种方法可以在 Git 中取消暂存文件?

为啥有两种方法可以在 Git 中取消暂存文件?

为啥有两种方法可以在 Git 中取消暂存文件?

为啥有两种方法可以在 Git 中取消暂存文件?

为啥在 elixir 中定义命名函数有两种方式?