有谁知道这两种方法之间的区别是什么:
String.protorype.slice
String.protorype.substring
答案 0 :(得分:730)
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 specification所涵盖的0(因此,Math.max(0, string.length + stop)
)。 / LI>
醇>
来源:Rudimentary Art of Programming & Development: Javascript: substr() v.s. substring()
答案 1 :(得分:80)
注意:如果你匆忙,和/或寻找简短的答案滚动到答案的底部,并阅读最后两行。如果不赶时间,请阅读整篇文章。
让我先说明事实:
语法:
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()
的副本。
< / p>
摘要:
如果您知道您将停止(但不包括)的索引(位置),请使用slice()
如果您知道要提取的字符长度,请使用substr()
。
答案 2 :(得分:18)
Ben Nadel撰写了一篇关于此的好文章,他指出了这些函数的参数差异:
String.slice( begin [, end ] )
String.substring( from [, to ] )
String.substr( start [, length ] )
他还指出,如果要切片的参数是负数,它们会从末尾引用该字符串。子串和子串不。
以下是他关于此http://www.bennadel.com/blog/2159-using-slice-substring-and-substr-in-javascript.htm
的文章答案 3 :(得分:10)
一个答案很好,但需要一点阅读。特别是新术语“停止”。
我的去 - 由差异组织,除了上面的丹尼尔的第一个答案之外,它还有用:
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。
答案 4 :(得分:9)
子字符串和切片之间的区别 - 它们是如何使用负数和俯视国外的参数:
子串(开始,结束)
否定参数被解释为零。太大的值被截断为字符串的长度: alert(“testme”.substring(-2)); //“testme”,-2变为0
此外,如果开始&gt;结束时,参数互换,即在开始和结束之间返回绘图线:
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.
它比奇怪的逻辑子串更方便。
除IE8之外的所有浏览器中支持的第一个参数的负值 - 。
如果选择这三种方法中的一种,在大多数情况下使用 - 它将是 slice :负面参数,它维护和操作最明显。
答案 5 :(得分:2)
slice和substring方法之间的唯一区别是参数
两者都有两个论点,例如:开始/结束/结束。
您不能将负值作为子串方法的第一个参数传递,而是切片方法从末尾遍历它。
切片方法参数详情:
REF: http://www.thesstech.com/javascript/string_slice_method
<强>参数强>
<强> START_INDEX 强> 切片应从哪里开始的索引。如果以负数提供值,则表示从最后开始。例如-1表示最后一个字符。 的 END_INDEX 强> 切片结束后的索引。如果未提供,则将从start_index获取切片到字符串的结尾。在负值的情况下,索引将从字符串的末尾开始计算。
子串方法参数详细信息:
参考:http://www.thesstech.com/javascript/string_substring_method
<强>参数强>
<强>从强> 它应该是一个非负整数来指定子字符串应该从哪里开始的索引。 以强> 一个可选的非负整数,用于提供索引,在该索引之前应该完成子字符串。
答案 6 :(得分:1)
substr:它使我们能够根据指定的索引来获取部分字符串。 substr-的语法 string.substr(开始,结束) start-start索引告知获取的开始位置。 end-end索引告诉字符串从何处获取。这是可选的。
slice:它提供了根据指定的索引获取部分字符串的功能。它允许我们指定正数和索引。 slice的语法-string.slice(start,end) start-start索引告诉获取的开始位置。 end-end索引告诉字符串从何处获取。它是可选的。 在“拼接”中,开始索引和结束索引都有助于获取正负索引。
字符串中“ slice”的示例代码
var str="Javatscript";
console.log(str.slice(-5,-1));
output: crip
字符串“ substring”的示例代码
var str="Javatscript";
console.log(str.substring(1,5));
output: avat
[*注意:负索引从字符串的末尾开始。]
答案 7 :(得分:0)
对于切片(开始,停止),如果stop为负,则stop将设置为:string.length - Math.abs(停止),而不是(string.length - 1) - Math.abs(停止)。< / p>