提问人:tmim 提问时间:2/11/2010 最后编辑:Arsen Khachaturyantmim 更新时间:4/25/2022 访问量:414142
String.slice 和 String.substring 有什么区别?
What is the difference between String.slice and String.substring?
答:
slice()
就像几种不同的行为一样。substring()
Syntax: string.slice(start, stop);
Syntax: string.substring(start, stop);
他们的共同点:
- If equals :返回一个空字符串
start
stop
- 如果省略:将字符提取到字符串的末尾
stop
- 如果任一参数大于字符串的长度,则将改用字符串的长度。
substring()
的区别:
- 如果 ,则将交换这两个参数。
start > stop
substring
- 如果任何一个参数是否定的,或者是,则将其视为 。
NaN
0
slice()
的区别:
- 如果 ,将返回空字符串。(
start > stop
slice()
""
) - If is negative:从字符串末尾设置 char,与 Firefox 中完全相同。在 Firefox 和 IE 中都观察到此行为。
start
substr()
- 如果为负数:将停止设置为:(原始值),但以 0 为界(因此,)除外,如 ECMA 规范中所述。
stop
string.length – Math.abs(stop)
Math.max(0, string.length + stop)
来源: 初级编程与开发艺术: Javascript: substr() vs.s. substring()
评论
slice()
string.length - stop
slice()
(string.length – 1) + stop
(string.length – 1) – Math.abs(stop)
String.slice
Array.slice
substring
stop
string.length + stop
stop
stop
一个答案很好,但需要稍微阅读一下。特别是新术语“停止”。
My Go -- 按差异组织,除了上面 Daniel 的第一个答案之外,它也很有用:
1)负指数。子字符串需要正索引,并将负索引设置为 0。Slice 的负索引表示从字符串末尾开始的位置。
"1234".substring(-2, -1) == "1234".substring(0,0) == ""
"1234".slice(-2, -1) == "1234".slice(2, 3) == "3"
2)交换索引。子字符串将对索引进行重新排序,使第一个索引小于或等于第二个索引。
"1234".substring(3,2) == "1234".substring(2,3) == "3"
"1234".slice(3,2) == ""
--------------------------
一般评论 -- 我觉得很奇怪,第二个索引是切片或子字符串的最后一个字符之后的位置。我希望“1234”.slice(2,2) 返回“3”。这使得 Andy 上面的混淆是有道理的——我希望 “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。
Ben Nadel 写了一篇关于这方面的好文章,他指出了这些函数参数的差异:
String.slice( begin [, end ] )
String.substring( from [, to ] )
String.substr( start [, length ] )
他还指出,如果要切片的参数为负数,则它们从末尾引用字符串。substring 和 substr 没有。
评论
'0123456789'.substr(-3, 2) -> '78'
TL的;博士:
- 如果您知道将停止(但不包括)的索引(位置),请使用 。
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()==substr()==substring()
使用负数作为参数
slice()
选择从字符串末尾开始的字符substr()
选择从字符串末尾开始的字符substring()
不执行
注意#4:slice()==substr()
如果第一个参数大于第二个参数
slice()
不执行substr()
由于第二个参数不是位置,而是长度值,因此它将像往常一样执行,没有问题substring()
将交换两个参数,并照常执行
第一个论点
slice()
必填;起始索引substr()
必填;起始索引substring()
必填;起始索引
注意#5:slice()==substr()==substring()
第二个论点
slice()
自选;结束提取的位置(最多,但不包括)substr()
自选;要提取的字符数substring()
自选;结束提取的位置(最多,但不包括)
注意#6:slice()==substring()
如果省略第二个参数怎么办?
slice()
选择从字符串的起始位置到结尾的所有字符substr()
选择从字符串的起始位置到结尾的所有字符substring()
选择从字符串的起始位置到结尾的所有字符
注意#7:slice()==substr()==substring()
所以,你可以说 和 之间是有区别的,而 基本上是 的副本。slice()
substr()
substring()
slice()
如果你想要 的功能:substr
"foobarbaz".substr(index, length);
在不使用已弃用功能的情况下,您可以执行以下操作:
"foobarbaz".substring(index, length + index);
并获得与所有边缘情况完全相同的结果,例如负索引/长度。
评论
substr
和 - 之间的区别在于它们如何处理国外的否定和忽视线参数:substring
slice
子字符串(开始、结束)
否定参数被解释为零。过大的值被截断为字符串的长度:
alert("testme".substring(-2)); // "testme", -2 becomes 0
此外,如果开始>结束,则参数是互换的,即在开始和结束之间返回绘图线:
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
slice 和 substring 方法之间的唯一区别是参数
两者都采用两个参数,例如 start/from 和 end/to。
您不能将负值作为子字符串方法的第一个参数传递,而是将 slice 方法从末尾遍历它。
切片方法参数详细信息:
参数
start_index切片应从何处开始编制索引。如果 value 为负数,则表示从最后开始。例如,-1 表示最后一个字符。end_index切片末尾的索引。如果未提供,则切片将从字符串的start_index到末尾。如果为负值,指数将从字符串末尾开始测量。
子字符串方法参数详细信息:
参数
从它应该是一个非负整数,用于指定子字符串应从何处开始的索引。自一个可选的非负整数,用于提供应在子字符串之前完成的索引。
对于 ,如果为负数,则设置为:slice(start, stop)
stop
stop
string.length – Math.abs(stop)
而不是:
string.length – 1 – Math.abs(stop)
substr:它为我们提供了基于指定索引获取部分字符串的功能。 substr- 的语法 string.substr(开始,结束) start - 开始索引告诉获取的开始位置。 end - 结束索引告诉字符串获取的位置。这是可选的。
slice:它提供根据指定索引获取字符串的一部分。它允许我们指定正数和索引。 slice 的语法 - string.slice(start,end) start - 开始索引告诉获取的开始位置。它 end - 结束索引告诉字符串获取的位置。这是可选的。 在“拼接”中,开始和结束指数都有助于获取正指数和负指数。
字符串中“slice”的示例代码
var str="Javascript";
console.log(str.slice(-5,-1));
output: crip
字符串中“substring”的示例代码
var str="Javascript";
console.log(str.substring(1,5));
output: avas
[*注意:负索引从字符串的末尾开始。
评论
上一个:从数组中删除最后一项
下一个:在 Go 中连接两个切片
评论
slice
slice
substring
var a = "asdf".substring(-1);
var a = "asdf".substring(0);
var a = "asdf".substring(2, -1);
0
-1
var a = "asdf".substring(0, 2);