String.slice 和 String.substring 之间有什么区别?

2022-08-29 22:06:42

有谁知道这两种方法之间的区别是什么?

String.prototype.slice
String.prototype.substring

答案 1

slice()就像一些不同的行为一样工作。substring()

Syntax: string.slice(start, stop);
Syntax: string.substring(start, stop);

他们的共同点:

  1. 如果等于 :返回空字符串startstop
  2. 如果省略:将字符提取到字符串的末尾stop
  3. 如果任一参数大于字符串的长度,则将使用字符串的长度。

子字符串()的区别

  1. 如果 ,则将交换这 2 个参数。start > stopsubstring
  2. 如果任一参数为负数或为 ,则将其视为 否定 。NaN0

slice() 的区别

  1. 如果为 ,将返回空字符串。(start > stopslice()"")
  2. 如果为负数:从字符串末尾设置 char,就像在 Firefox 中一样。在 Firefox 和 IE 中都观察到了此行为。startsubstr()
  3. 如果为负:将 stop 设置为:(原始值),但 ECMA 规范中涵盖的有界于 0(因此)除外。stopstring.length – Math.abs(stop)Math.max(0, string.length + stop)

来源: 基本编程与开发艺术: Javascript: substr() v.s. substring()


答案 2

TL;DR:

  • 如果您知道要停止的索引(位置),请使用 。slice()
  • 如果您知道要提取的字符的长度,则可以使用 ,但不鼓励这样做,因为它已被弃用。substr()

否则,请继续阅读以获取完整比较

语法

  • string.slice(start,end)
  • string.substr(start,length)
  • string.substring(start,end)

注意#1slice()==substring()

它有什么作用?

  • slice()提取字符串的各个部分,并在新字符串中返回提取的部分。
  • substr()提取字符串的各个部分,从指定位置的字符开始,并返回指定的字符数。
  • substring()提取字符串的各个部分,并在新字符串中返回提取的部分。

注意#2slice()==substring()

更改原始字符串?

  • slice()
  • substr()
  • substring()

注意#3slice()==substr()==substring()

使用负数作为参数

  • slice()选择从字符串末尾开始的字符
  • substr()选择从字符串末尾开始的字符
  • substring()不执行

注意#4slice()==substr()

如果第一个参数大于第二个参数

  • slice()不执行
  • substr()由于第二个参数不是位置,而是长度值,因此它将像往常一样执行,没有问题
  • substring()将交换两个参数,并像往常一样执行

第一个参数

  • slice()必需;起始索引
  • substr()必需;起始索引
  • substring()必需;起始索引

注意#5slice()==substr()==substring()

第二个论点

  • slice()可选;结束提取的位置(最多,但不包括)
  • substr()可选;要提取的字符数
  • substring()可选;结束提取的位置(最多,但不包括)

注意#6slice()==substring()

如果省略第二个参数怎么办?

  • slice()选择从字符串的起点到终点的所有字符
  • substr()选择从字符串的起点到终点的所有字符
  • substring()选择从字符串的起点到终点的所有字符

注意#7slice()==substr()==substring()

因此,可以说 和 之间存在差异,而 基本上是 的副本。slice()substr()substring()slice()

如果你想要 的功能:substr

"foobarbaz".substr(index, length);

在不使用已弃用的功能的情况下,您只需执行以下操作:

"foobarbaz".substring(index, length + index);

并获得完全相同的结果条形所有边缘情况,例如负索引/长度。