What is the difference between String.slice and String.substring?
有人知道这两种方法的区别吗:
1 2 | String.protorype.slice String.protorype.substring |
1 2 | Syntax: string.slice(start, stop); Syntax: string.substring(start, stop); |
他们的共同点是:
来源:编程和开发的基本艺术:javascript:substr()v.s.substring())
注意:如果您赶时间,和/或寻找简短的答案,滚动到答案的底部,并阅读最后两行。如果不赶时间,请阅读全部内容。让我先陈述事实:
Syntax:
它做什么?
更改原始字符串?
使用负数作为参数:
如果第一个参数大于第二个参数:
第一个论点:需要
第二个论点:
如果第二个论点被省略了呢?
所以,你可以说,
综上所述:如果知道要停止(但不包括)的索引(位置),请使用
Ben Nadel写了一篇关于这个的好文章,他指出了这些函数的参数的不同:
4他还指出,如果要切片的参数为负数,则从末尾引用字符串。子串和子串没有。
这是他关于这个的文章http://www.benadel.com/blog/2159-using-slice-substring-and-substr-in-javascript.htm
一个答案很好,但需要仔细阅读。尤其是新术语"停止"。
我的行动——按差异进行组织,使它除了上面丹尼尔的第一个答案之外还有用:
1)负指标。子字符串需要正索引,并将负索引设置为0。slice的负索引表示从字符串末尾开始的位置。
1 2 | "1234".substring(-2, -1) =="1234".substring(0,0) =="" "1234".slice(-2, -1) =="1234".slice(2, 3) =="3" |
2)索引交换。子字符串将对索引重新排序,使第一个索引小于或等于第二个索引。
1 2 | "1234".substring(3,2) =="1234".substring(2,3) =="3" "1234".slice(3,2) =="" |
----------------------
一般性评论——我觉得奇怪的是第二个索引是切片或子字符串最后一个字符之后的位置。我希望"1234"。切片(2,2)返回"3"。这使得安迪在上面的困惑是合理的——我希望"1234"。slice(2,-1)返回"34"。是的,这意味着我对JavaScript还不熟悉。这也意味着这种行为:
1 2 | "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的区别在于它们如何处理否定和忽略国外的行参数:
子字符串(开始、结束)
负参数被解释为零。值太大??截断到字符串长度:nbsp;alert("testme".substring(-2));/"testme",-2变为0
此外,如果start>end,参数会互换,即在start和end之间返回绘图行:
1 2 3 | 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" |
片
负值??从线路末端测量:
1 2 | 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除外)支持的SUBSTR的第一个参数的负值。
如果选择这三种方法中的一种,在大多数情况下使用——它将是切片:负参数,并且它维护和操作最明显。
slice和substring方法的唯一区别是参数
两者都采用两个参数,例如start/from和end/to。
不能将负值作为子字符串方法的第一个参数传递,而应使slice方法从末尾遍历它。
切片方法参数详细信息:
裁判:http://www.thesstech.com/javascript/string_slice_方法
争论
启动索引从切片开始的索引。如果值为负数,则表示从最后一个开始。例如,最后一个字符是-1。末端指数切片结束后的索引。如果没有提供,则切片将从字符串的开始索引到结束。如果为负值,则从字符串末尾开始测量索引。
子字符串方法参数详细信息:
参考:http://www.thesstech.com/javascript/string_substring_method
争论
从它应该是一个非负整数,以指定子字符串从何处开始的索引。到一个可选的非负整数,用于提供索引,在此索引之前应完成子字符串。
SUBSTR:它提供我们根据指定的索引提取字符串的一部分。SUBSTR语法-string.substr(开始,结束)start-start索引指示提取的开始位置。END-END索引指示字符串的提取位置。这是可选的。
slice:它提供了基于指定索引提取部分字符串的功能。它允许我们指定正数和索引。slice-string.slice的语法(开始、结束)start-start索引告诉提取的起始位置。END-END索引指示字符串的提取位置。这是可选的。在"拼接"中,开始索引和结束索引都有助于取正索引和负索引。
字符串中"slice"的示例代码
1 2 3 4 | var str="Javatscript"; console.log(str.slice(-5,-1)); output: crip |
字符串中"substring"的示例代码
1 2 3 4 | var str="Javatscript"; console.log(str.substring(1,5)); output: avat |
[*注:负索引从字符串末尾开始。]
对于slice(start,stop),如果stop为负数,stop将设置为:string.length–math.abs(stop),而不是(string.length–1)–math.abs(stop)。