slice()
作用类似于substring()
,但有一些不同的行为。
Syntax: string.slice(start, stop);
Syntax: string.substring(start, stop);
他们有什么共同点:
start
等于stop
:返回一个空字符串stop
:将字符提取到字符串的末尾 substring()
区别 :
start > stop
,那么substring
将交换这两个参数。 NaN
,则将其视为0
。 slice()
区别 :
start > stop
, slice()
将返回空字符串。 ( ""
) start
为负:从字符串的末尾设置 char,就像 Firefox 中的substr()
一样。在 Firefox 和 IE 中都观察到此行为。 stop
为负:将 stop 设置为: string.length – Math.abs(stop)
(原始值),但以ECMA 规范中的范围为 0(因此, Math.max(0, string.length + stop)
)为界。 注意:如果您急于和 / 或正在寻找简短答案,请滚动到答案的底部,然后阅读最后两行。
让我首先说明事实:
句法:
string.slice(start,end)
string.substr(start,length)
string.substring(start,end)
注意#1: slice()==substring()
它能做什么?
slice()
方法提取字符串的一部分,并将提取的部分返回到新字符串中。
substr()
方法提取字符串的一部分,从指定位置的字符开始,并返回指定数量的字符。
substring()
方法提取字符串的一部分,并将提取的部分返回到新字符串中。
注意#2: slice()==substring()
更改原始字符串?
slice()
不
substr()
不会
substring()
不会
注意#3: slice()==substring()
使用负数作为参数:
slice()
选择从字符串末尾开始的字符
substr()
选择从字符串末尾开始的字符
substring()
不执行
注意#3: slice()==substr()
如果第一个参数大于第二个参数:
slice()
不执行
substr()
因为第二个参数不是位置,而是长度值,它将照常执行,没有问题
substring()
将交换两个参数,并照常执行
第一个论点:
slice()
必需,指示:起始索引
substr()
必需,指示:起始索引
substring()
必需,指示:起始索引
注意#4: slice()==substr()==substring()
第二个论点:
slice()
可选,终止提取的位置(最多但不包括)
substr()
可选,要提取的字符数
substring()
可选,终止提取的位置(最多但不包括)
注意#5: slice()==substring()
如果省略第二个参数怎么办?
slice()
从字符串的开始位置到结尾选择所有字符
substr()
从字符串的开始位置到结尾选择所有字符
substring()
从substring()
的开始位置到结尾选择所有字符
注意#6: slice()==substr()==substring()
因此,可以说slice()
和substr()
之间有区别,而substring()
基本上是slice()
的副本。
综上所述:
如果知道要停止的索引(位置)(但不包括在内),请使用slice()
如果您知道要提取的字符长度,请使用substr()
。
Ben Nadel 撰写了一篇很好的文章,指出了这些函数的参数差异:
String.slice( begin [, end ] )
String.substring( from [, to ] )
String.substr( start [, length ] )
他还指出,如果 slice 的参数为负,则它们将从结尾引用字符串。 Substring 和 substr 不会。
这是他关于此的文章http://www.bennadel.com/blog/2159-using-slice-substring-and-substr-in-javascript.htm