tmi*_*mim 766 javascript substring substr slice
有谁知道这两种方法之间的区别是什么:
String.prototype.slice
String.prototype.substring
Run Code Online (Sandbox Code Playgroud)
Dan*_*llo 796
slice()
像substring()
一些不同的行为一样工作.
Syntax: string.slice(start, stop);
Syntax: string.substring(start, stop);
Run Code Online (Sandbox Code Playgroud)
他们有什么共同点:
start
equals 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)
原始值),除非限制在0(因此,Math.max(0, string.length + stop)
),如ECMA规范中所述.来源:编程与开发的基础艺术:Javascript:substr()vs substring()
小智 87
注意:如果你赶时间,和/或寻找简短的答案滚动到答案的底部,并阅读最后两行.如果不赶时间,请阅读整篇文章.
首先让我陈述一下事实:
语法:
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()
.
在摘要中:
如果您知道要停止的索引(位置)(但不包括),请slice()
在知道要提取的字符长度时使用substr()
.
小智 22
Ben Nadel撰写了一篇关于此的好文章,他指出了这些函数的参数差异:
String.slice( begin [, end ] )
String.substring( from [, to ] )
String.substr( start [, length ] )
Run Code Online (Sandbox Code Playgroud)
他还指出,如果要切片的参数为负数,它们会从末尾引用该字符串.子串和子串不.
这是他关于这篇文章的文章http://www.bennadel.com/blog/2159-using-slice-substring-and-substr-in-javascript.htm
Ger*_*ill 11
答案很好,但需要一点阅读.特别是新术语"停止".
我的去 - 由差异组织,除了上面的丹尼尔的第一个答案之外,它还有用:
1)负面指数.子串需要正索引,并将负索引设置为0.切片的负索引表示从字符串末尾开始的位置.
"1234".substring(-2, -1) == "1234".substring(0,0) == ""
"1234".slice(-2, -1) == "1234".slice(2, 3) == "3"
Run Code Online (Sandbox Code Playgroud)
2)交换索引.子字符串将重新排序索引以使第一个索引小于或等于第二个索引.
"1234".substring(3,2) == "1234".substring(2,3) == "3"
"1234".slice(3,2) == ""
Run Code Online (Sandbox Code Playgroud)
一般注释 - 我发现第二个索引是切片或子字符串的最后一个字符之后的位置,我觉得很奇怪.我希望"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.
Run Code Online (Sandbox Code Playgroud)
我的2c.
Ale*_*ndr 10
子串和切片之间的区别 - 它们如何与负面和俯视线的国外参数一起工作:
substring(开始,结束)
否定参数被解释为零.太大的值被截断为字符串的长度:alert("testme".substring(-2)); //"testme",-2变为0
此外,如果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"
Run Code Online (Sandbox Code Playgroud)
切片
负值是从行尾测量的:
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.
Run Code Online (Sandbox Code Playgroud)
它比奇怪的逻辑子串更方便.
除IE8-之外的所有浏览器中支持的第一个参数的负值.
如果选择这三种方法中的一种,在大多数情况下使用 - 它将是切片:否定参数,它维护和操作最明显.