有人知道这两种方法的区别吗?

String.prototype.slice
String.prototype.substring

当前回答

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)

Ben Nadel写了一篇关于这方面的好文章,他指出了这些函数参数的区别:

String.slice( begin [, end ] )
String.substring( from [, to ] )
String.substr( start [, length ] )

他还指出,如果要切片的参数是负的,它们将从末尾引用字符串。Substring和substr没有。

这是他关于这方面的文章。

slice方法和substring方法的唯一区别是参数

两者都有两个参数,例如start/from和end/to。

你不能传递一个负值作为子字符串方法的第一个参数,但slice方法从结束遍历它。

切片方法参数细节:

参数

start_index 从切片开始的位置索引。如果value为负,则表示从最后开始。例如,最后一个字符是-1。 end_index 切片结束后的索引。如果没有提供切片将从start_index到字符串的末尾。如果是负值,指数将从字符串的末端测量。

子字符串方法参数详细信息:

参数

从 它应该是一个非负整数,以指定子字符串应该从哪里开始。 来 一个可选的非负整数,用于提供应在哪个子字符串之前结束的索引。

substr:它为我们提供了基于指定索引获取部分字符串的方法。 substr-的语法 string.substr(开始、结束) Start - Start索引说明从哪里开始抓取。 End - End索引告诉upto字符串的读取位置。它是可选的。

slice:它提供了基于指定索引获取部分字符串的方法。它允许我们指定正数和下标。 slice - string.slice(start,end)的语法 Start - Start索引说明从哪里开始抓取。这是 End - End索引告诉upto字符串的读取位置。它是可选的。 在“拼接”中,起始索引和结束索引都有助于取正索引和负索引。

字符串中'slice'的示例代码

var str="Javascript";
console.log(str.slice(-5,-1));

output: crip

字符串中的“substring”示例代码

var str="Javascript";
console.log(str.substring(1,5));

output: avas

[*注意:负索引从字符串的末尾开始。]

唯一的答案是好的,但需要一些解读。尤其是有了“停止”这个新术语。

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"。这使得安迪的困惑是合理的——我认为是“1234”。切片(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.

我的2摄氏度。