有谁知道这两种方法之间的区别:
String.prototype.slice
String.prototype.substring
有谁知道这两种方法之间的区别:
String.prototype.slice
String.prototype.substring
substr:它使我们能够根据指定的索引来获取部分字符串。substr-string.substr(start,end)start的语法-开始索引告诉获取的开始位置。end-end索引告诉字符串从何处获取。它是可选的。
slice:它提供了根据指定的索引来获取部分字符串的功能。它允许我们指定正数和索引。slice的语法-string.slice(start,end)start-起始索引告诉获取开始的位置。end-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
[*注:负索引从字符串的末尾开始。]
注意:如果您急于和/或正在寻找简短的答案,请滚动到答案的底部,然后阅读最后两行。如果不急,请阅读整本书。
让我首先说明事实:
语法:
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()
。
一个答案很好,但是需要一点阅读。尤其是新术语“停止”。
我的围棋(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”。是的,这意味着我是Java的新手。这也意味着这种行为:
"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。
slice和substring方法之间的唯一区别是参数
两者都有两个参数,例如开始/起始和结束/至。
您不能将负值作为子字符串方法的第一个参数传递,而让slice方法从末尾遍历它。
切片方法参数详细信息:
参考:http: //www.thesstech.com/javascript/string_slice_method
争论
start_index 切片应从何处开始的索引。如果提供负值,则表示从最后开始。例如,最后一个字符为-1。 end_index 切片结束后的索引。如果未提供,则切片将从start_index到字符串的结尾。在负值的情况下,将从字符串末尾开始测量索引。
子字符串方法参数详细信息:
REF:http : //www.thesstech.com/javascript/string_substring_method
争论
from 应该是一个非负整数,用于指定子字符串应从何处开始的索引。 到 一个可选的非负整数,以提供在完成子字符串之前的索引。
Ben Nadel撰写了一篇很好的文章,指出了这些函数的参数差异:
String.slice( begin [, end ] )
String.substring( from [, to ] )
String.substr( start [, length ] )
他还指出,如果slice的参数为负,则它们将从结尾引用字符串。Substring和substr不会。
这是他关于此的文章http://www.bennadel.com/blog/2159-using-slice-substring-and-substr-in-javascript.htm
子字符串和切片之间的区别-它们是如何与国外的负数和俯瞰线参数一起工作的:
子字符串(开始,结束)
负参数将被解释为零。太大的值将被截断为字符串的长度:alert(“ testme” .substring(-2)); //“ testme”,-2变为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.
它比奇怪的逻辑子字符串方便得多。
除IE8-以外的所有浏览器均支持substr的第一个参数的负值。
如果在大多数情况下使用这三种方法中的一种,它将是slice:否定参数,并且它保持和操作最明显。
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
为负:像substr()
在Firefox中一样,从字符串末尾设置char 。在Firefox和IE中都观察到此行为。stop
为负:停止点设置为:(string.length – Math.abs(stop)
原始值),但ECMA规范中Math.max(0, string.length + stop)
涵盖的边界为0(因此)。
对于
slice(start, stop)
,如果stop
为负,stop
则将设置为:而不是: