• js字符串的操作方法slice()、substring()、substr() 详解,特别是参数为负数的情况


    摘抄自:《JavaScript高级程序设计》(第3版) 第123页。


    写在前面:

    很多时候,我们可能都记不清楚这几个api的区别,或者说当时看懂了,过后不经常用的话,就会很快忘记。

    参数为负数的情况,在实际的开发中,几乎用不到,但是面试的时候,有些公司的笔试题就喜欢考负数的情况,所以记录下来,方便以后查阅。


    正文:

    slice()、substring()、substr()这三个方法都会返回被操作字符串的一个子字符串,而且也都接受一或两个参数。

    第一个参数指定子字符串的开始位置,第二个参数(在指定的情况下)表示子字符串到哪里结束。

    具体来说,slice()和substring()的第二个参数指定的是子字符串最后一个字符后面的位置(含头不含尾)。而substr()的第二个参数指定的是返回的字符个数。

    如果没有给这些方法传递第二个参数,则将字符串的长度作为结束位置。

    slice()、substring()和substr()不会修改字符串本身的值,它们只是返回一个基本类型的字符串值,对原始字符串没有任何影响

    示例:

    var stringValue = "hello world";
    stringValue.slice(3);       // "lo world"
    stringValue.substring(3);   // "lo world"
    stringValue.substr(3);      // "lo world"
    stringValue.slice(3,7);     // "lo w"
    stringValue.substring(3,7); // "lo w"
    stringValue.substr(3,7);    // "lo worl"

    在传递给这些方法的参数是负值的情况下,它们的行为就不尽相同了。其中:

    • slice()方法会将传入的负值与字符串的长度相加;
    • substr()方法将负的第一个参数加上字符串的长度,而将负的第二个参数转换为0;
    • substring()方法会把所有的负值参数都转换为0;

    示例:

    var stringValue = "hello world";
    stringValue.slice(-3);       // "rld"
    stringValue.substring(-3);   // "hello world"
    stringValue.substr(-3);      // "rld"
    stringValue.slice(3,-4);     // "lo w"
    stringValue.substring(3,-4); // "hel"
    stringValue.substr(3,-4);    // "" (空字符串)

    这个例子清晰地展示了上述三个方法之间的不同行为。在给slice()和substr()传递一个负值参数时,它们的行为相同。这是因为 -3 会被转换为 8 (字符串长度加参数 11+(-3)=8),实际上相当于调用了 slice(8) 和 substr(8)。但substring()方法则返回了全部字符串,因为它将 -3 转换成了0 。

    当第二个参数是负值时,这三个方法的行为各不相同。

    • slice()方法会把第二个参数转换为 7,这就相当于调用了 slice(3,7) ,因此返回 "lo w" 。
    • substring()方法会把第二个参数转换为0,使调用变成了substring(3,0),而由于这个方法会将较小的数作为开始位置,将较大的数作为结束位置,因此最终相当于调用了 substring(0,3) 。
    • substr() 也会将第二个参数转换为0,这也就意味着返回包含零个字符的字符串,也就是一个空字符串。
  • 相关阅读:
    《互联网时代的软件革命-saas架构设计》读书笔记
    iphone11白苹果 解决办法最简单
    idea配置(重新配置)
    力扣刷题03--无重复字符的最长字串
    力扣刷题02--两数相加
    《设计原本》读书笔记(三)
    《设计原本》读书笔记(二)
    《设计原本》读书笔记(一)
    MVC架构科技小论文
    面向服务架构及其应用
  • 原文地址:https://www.cnblogs.com/smile-fanyin/p/14628311.html
Copyright © 2020-2023  润新知