为什么有两种不同的方法slice()&子()?

时间:2013-08-14 05:59:08

标签: javascript substring slice substr

var name="nameSomnath";//remove name

我可以使用slice()

var result = name.slice( 4 );

substring()

可以做同样的事情
var result = name.substring( 4 );

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

5 个答案:

答案 0 :(得分:3)

即使它看起来像slicesubstring表面上做同样的事情,但最大的区别在于它们如何处理否定论点。

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

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

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

答案 1 :(得分:2)

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

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

你能在string个实例上完全复制一个方法与另一个方法的行为吗?是。为什么他们选择包括两者可能会失去历史。我的猜测虽然很熟悉。我敢打赌,那里的框架非常少slice stringssubstr的框架很多。

答案 2 :(得分:1)

修改: Oooops - 我错了 - 这里有一个切片方法!我会再次删除我的帖子 - 抱歉没有正确研究!!!或者,好吧,可能不会删除它,但至少要在其中保留此更正。 ; - )

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

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

答案 3 :(得分:1)

  

.slice(开始,结束)

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


SUBSTR

  

.substr(开始,长度

开始位置提取到否。 chars。指定


  

.substring(start,end)

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


答案 4 :(得分:0)

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