关于javascript:String.slice和String.substring有什么区别?

What is the difference between String.slice and String.substring?

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

1
2
String.protorype.slice
String.protorype.substring


slice()的工作方式与substring()类似,但有一些不同的行为。

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

他们的共同点是:

  • 如果start等于stop:返回空字符串
  • 如果省略stop:将字符提取到字符串末尾
  • 如果其中一个参数大于字符串的长度,则将使用字符串的长度。
  • substring()的区别:

  • 如果start > stop,那么substring将交换这两个参数。
  • 如果其中一个论点是否定的或是NaN,则将其视为0
  • slice()的区别:

  • 如果start > stopslice()将返回空字符串。(""号)
  • 如果start为负:从字符串的末尾设置char,与firefox中的substr()完全相同。在Firefox和IE中都可以观察到这种行为。
  • 如果stop为负:将stop设置为:string.length – Math.abs(stop)(原始值),但在ECMA规范中所涵盖的0(因此,Math.max(0, string.length + stop)为界)除外。
  • 来源:编程和开发的基本艺术:javascript:substr()v.s.substring())


    注意:如果您赶时间,和/或寻找简短的答案,滚动到答案的底部,并阅读最后两行。如果不赶时间,请阅读全部内容。让我先陈述事实:

    Syntax: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()不执行由于第二个参数不是位置,而是长度值,所以它将像往常一样执行,没有问题。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()


    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)。