有谁知道这两种方法有什么区别?
String.prototype.slice
String.prototype.substring
有谁知道这两种方法有什么区别?
String.prototype.slice
String.prototype.substring
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,就像substr()
在 Firefox 中一样。在 Firefox 和 IE 中都观察到了这种行为。stop
为负:将 stop 设置为:(string.length – Math.abs(stop)
原始值),但在ECMA 规范Math.max(0, string.length + stop)
中涵盖的范围为 0(因此, )除外。slice()
.substr()
.否则,请继续阅读以进行完整比较
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()
选择从开始位置到字符串结尾的所有字符注意#6:slice()==substr()==substring()
slice()
因此,您可以说和之间有区别substr()
,而substring()
基本上是slice()
.
Ben Nadel 写了一篇很好的文章,他指出了这些函数的参数差异:
String.slice( begin [, end ] )
String.substring( from [, to ] )
String.substr( start [, length ] )
他还指出,如果 slice 的参数是负数,它们会从末尾引用字符串。子字符串和子字符串没有。
这是他关于这个的文章。
一个答案很好,但需要一点阅读。特别是使用新术语“停止”。
我的 Go - 除了上面丹尼尔的第一个答案之外,按差异组织以使其有用:
1) 负指标。子字符串需要正索引,并将负索引设置为 0。切片的负索引表示从字符串末尾开始的位置。
"1234".substring(-2, -1) == "1234".substring(0,0) == ""
"1234".slice(-2, -1) == "1234".slice(2, 3) == "3"
2) 索引交换。Substring 将重新排序索引以使第一个索引小于或等于第二个索引。
"1234".substring(3,2) == "1234".substring(2,3) == "3"
"1234".slice(3,2) == ""
一般评论——我觉得奇怪的是第二个索引是切片或子字符串的最后一个字符之后的位置。我希望“1234”.slice(2,2) 返回“3”。这使得安迪的困惑是有道理的——我希望“1234”.slice(2, -1) 返回“34”。是的,这意味着我是 Javascript 新手。这也意味着这种行为:
"1234".slice(-2, -2) == "", "1234".slice(-2, -1) == "3", "1234".slice(-2, -0) == "" <-- you have to use length or omit the argument to get the 4.
"1234".slice(3, -2) == "", "1234".slice(3, -1) == "", "1234".slice(3, -0) == "" <-- same issue, but seems weirder.
我的2c。
substring
和-之间的区别在于slice
它们如何处理国外论点的负面和忽视线:
否定参数被解释为零。太大的值被截断为字符串的长度:
alert("testme".substring(-2)); // "testme", -2 becomes 0
此外,如果start > end,则参数互换,即绘图线在 start 和 end 之间返回:
alert("testme".substring(4, -1)); // "test"
// -1 Becomes 0 -> got substring (4, 0)
// 4> 0, so that the arguments are swapped -> substring (0, 4) = "test"
负值从行尾开始测量:
alert("testme".slice(-2)); // "me", from the end position 2
alert("testme".slice(1, -1)); // "estm", from the first position to the one at the end.
这比奇怪的逻辑方便多了substring
。
除 IE8- 之外的所有浏览器都支持 substr 的第一个参数的负值。
如果选择这三种方法之一,在大多数情况下使用 - 这将是slice
:否定论点,并且它保持和运行最明显。
substr:它让我们可以根据指定的索引获取部分字符串。substr-string.substr(start,end) 的语法 start - 开始索引告诉获取开始的位置。end - 结束索引告诉字符串获取的位置。这是可选的。
slice:提供根据指定索引获取部分字符串。它允许我们指定正数和索引。slice 的语法 - string.slice(start,end) start - start index 告诉提取开始的位置。它是 end - end index 告诉字符串提取的位置。这是可选的。在“拼接”中,开始和结束索引都有助于获取正负索引。
字符串中“切片”的示例代码
var str="Javascript";
console.log(str.slice(-5,-1));
output: crip
字符串中“子字符串”的示例代码
var str="Javascript";
console.log(str.substring(1,5));
output: avas
[*注意:负索引从字符串的末尾开始。]
The only difference between slice and substring method is of arguments
Both take two arguments e.g. start/from and end/to.
You cannot pass a negative value as first argument for substring method but for slice method to traverse it from end.
Slice method argument details:
REF: http://www.thesstech.com/javascript/string_slice_method
Arguments
start_index Index from where slice should begin. If value is provided in negative it means start from last. e.g. -1 for last character. end_index Index after end of slice. If not provided slice will be taken from start_index to end of string. In case of negative value index will be measured from end of string.
Substring method argument details:
REF: http://www.thesstech.com/javascript/string_substring_method
Arguments
from It should be a non negative integer to specify index from where sub-string should start. to An optional non negative integer to provide index before which sub-string should be finished.
对于slice(start, stop)
,如果stop
为负,stop
将设置为:
string.length – Math.abs(stop)
而不是:
string.length – 1 – Math.abs(stop)