• substr,substring,slice 的区别


            javascript中的三个函数substr,substring,slice都可以用来提取字符串的某一部分(函数名称都是小写,不要写成subStr,subString又或者Substring,记住js是区分大小写的),但是它们之间还是有一些区别的。

    substring(start,end)和slice(start,end)都表示提取从start下标开始(包括该下标上的字符)到end下标结束(不包括该下标上的字符)之间的内容,如果不包含end参数则表示提取从start到结尾的全部字符

     

    例1:

    "9876543210".substring(0,2)-->"98"    

    "9876543210".slice(0,2)-->"98"

    "9876543210".substring(5)-->"43210"

    "9876543210".slice(5)-->"43210"

     

    但是他们之间还是有区别的,

    substring不支持负数参数(如果为负数则转换为0来处理),slice支持负数参数(如果参数为负数则表示从最右边算起,例1第一行中的0为-1,1为-2);substring如果end>start则互相交换,而slice则不支持交换

     

    例2:

    "9876543210".slice(-5,-2)-->"432" 
    "9876543210".substring(-5,-2)-->""

    上面的slice中的-5从尾部0开始数刚好为4,-2则为1,因为不会包含end的字符所以提取了"432"

    而substring则将-5,-2都转换为0来出来所以实际为"9876543210".substring(0,0)所以得到""的空字符串。

     

    例3:

    "9876543210".slice(5,1)-->""

    "9876543210".substring(5,1)-->"8765"

    上面的slice开始小标大于结束小标, 因为不支持交换所以只能得到""

    substring则被解释为"9876543210".substring(1,5)所以得到了"8765"

     

    下面来解释一下substr函数,为什么要将substr放到最后呢,因为substr其实是不是作为ECMAScript标准发布的,因此各种浏览器之间不是兼容的,但是既然提出来了还是讲一下

     

    substr(start,length)函数可以看出其实和上面两种函数的差别,即第二个参数代表的是截取的长度,不再是作为结尾下标来处理,所以该函数表示从开始下标start开始,向右截取length个长度的字符。按照w3c上来讲start是支持负数的,即表示从字符传的结尾开始计算,但是因为该函数并不是标准里的所以各浏览器实现不一,所以还是不建议用负数了。length为负数则不会截取任何字符,因为长度不可能为负的

     

    例4:

    "9876543210".substr(2,3)-->"765"

    "9876543210".substr(2,-1)-->""

    第一个从开始下标为2的7开始,截取三个字符得到"765"

    第二个因为长度为-1所以不做任何截取操作

     

    例5:

    "9876543210".substr(-5,2)-->"43"(FireFox)

    "9876543210".substr(-5,2)-->"98"(IE)

     

    看上面两个实现,FireFox中开始下标-5按照从尾部开始计算取倒数第5个数即4开始截取两个字符得到"43"

    而IE下将-5转换为0因此从左开始计算得到0下标的9,再获取两个长度得到"98"

    可以明显的看到因为不标准的缘故,实现方式产生了不一致。

  • 相关阅读:
    tp5 window环境迁移到一键lnmp流程问题笔记
    构建:什么是构建
    requests--etree--xpath
    python-requests
    python正则表达式03--字符串中匹配数字
    python正则表达式02--findall()和search()方法区别,group()方法
    python正则表达式01--贪心算法和非贪心算法findall()
    UIViewController的生命周期(根视图view从无到有的过程)
    CoreData基础
    XMPP即时通信(基础)
  • 原文地址:https://www.cnblogs.com/vincent_ds/p/2584178.html
Copyright © 2020-2023  润新知