String.slice 和 String.substring 的区别

原文:Stack Overflow - What is the difference between String.slice and String.substring?

Daniel Vassallo 的回答

slice() 和 substring() 作用相似,同时有一些区别。

语法:string.slice(start, stop)
语法:string.substring(start, stop)


  1. 如果 start 参数和 stop 参数相同:返回一个空的字符串
  2. 如果 stop 参数被省略:提取字符串末尾的字符
  3. 如果任意一个参数大于字符串的 length 属性,那么参数将会被字符串的长度所取代

substring() 的区别:

  1. 如果 start > stop,那么 substring 会交换这两个参数。
  2. 如果两个参数中的任意一个是负数或者 NaN,会被当作 0 对待。

slice() 的区别:

  1. 如果 start > stop,slice() 不会交换两个参数。
  2. 如果 start 参数是负数:起始位置将从字符串结尾开始计算。与 Firefox 中的 substr() 完全相同。这种行为在 Firefox 和 IE 中都可以观察到。
  3. 如果 stop 参数是负数:设置 stop 为:string.length – Math.abs(stop)
    ,except bounded at 0 (thus, Math.max(0, string.length + stop)) as covered in the ECMA specification.

Alexandr 的回答

substring 和 slice 之间的区别是它们怎么对待负值和 overlooking lines abroad arguments:

substring(start, end)

负值的参数被解释为 0,过大的值将被缩短为 string 的 length 值

"testme".substring(-2) // "testme", -2 becomes 0

此外,如果 start > end,参数将被互换,也就是返回 start 参数和 end 参数之间的部分:

"testme".substring (4, -1)); // "test"
// -1 Becomes 0 -> got substring (4, 0)
// 4> 0, so that the arguments are swapped -> substring (0, 4) = "test"

slice(start, end)


"testme".slice(-2) // "me", from the end position 2
"testme".slice(1, -1) // "estm", from the first position to the one at the end.

It is much more convenient than the strange logic substring.

A negative value of the first parameter to substr supported in all browsers except IE8-.

If the choice of one of these three methods, for use in most situations - it will be slice: negative arguments and it maintains and operates most obvious.