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"

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

substr,substring,slice 的区别的更多相关文章

  1. js中 substr(), substring(), slice()的区别

    一.作用 三者都是基于原字符串创建新字符串的方法. 接收一到两个参数,第一个参数截取字符串的开始位置(字符下标,从0开始),第二个参数因方法不同而不同,后面不同点会说到. 另外,三个方法都不会修改原字 ...

  2. js 字符串截取函数substr,substring,slice之间的差异

    js 字符串的截取,主要有三个函数,一般使用三个函数:substr,substring,slice. 而这三个函数是不完全一样的,平时很难记住,在这里做下笔记,下次遇到的时候,直接从这里参考,调用合适 ...

  3. javascript中substring()、substr()、slice()的区别

    在js字符截取函数有常用的三个slice().substring().substr()了,下面我来给大家介绍slice().substring().substr()函数在字符截取时的一些用法与区别吧. ...

  4. [javascript string] slice();substr();substring();之间的区别

    今天遇到这个问题,发现ぜんぜんわすねまます3个方法,直接上代码吧,[网络版本较多就不注明参考过哪些了 -0- ] var test = 'hello world'; //均一位参数测试 console ...

  5. JavaScript中的slice,splice,substr,substring,split的区别

    万恶的输入法,在sublime中会显示出繁体字,各位看官见谅. 1.slice()方法:该方法在数组和string对象中都拥有. var a = [1,2,3,4,5,6]; var s = 'thi ...

  6. js中substr,substring,slice。截取字符串的区别

    substr(n1,n2) n1:起始位置(可以为负数) n2:截取长度(不可以为0,不可以为负数,可以为空) 当n1为正数时,从字符串的n1下标处截取字符串(起始位置),长度为n2. 当n1为负数时 ...

  7. substring,substr,和slice的区别详解。

    1.Substring(x,y) : 输出一个字符串,当其中只有一个参数时,会输出从x开始到结尾的String. 举例: var str="hello";        conso ...

  8. substring()、 substr() 、slice()的区别:

    stringObject.substring(start,stop) 用于提取字符串中介于两个指定下标之间的字符.start必需.一个非负的整数,规定要提取的子串的第一个字符在 stringObjec ...

  9. slice,splice,substr,substring函数的区别

    slice: 语法:array.slice(startIndex,endIndex); 参数: startIndex:必须,规定从何处开始选取,如果为负则从尾部开始计算 : endIndex:可选,规 ...

随机推荐

  1. 如何创建javascript只读变量

    最近学习了一下ES标准,发现其实有很多直接间接的方法实现一个只读变量,这里总结一下. 1.最直接的是利用对象属性的特性来实现: var obj = {pro1:1}; Object.definePro ...

  2. JS取地址栏参数的两种方法

    第一种方法: function GetQueryString(name){ var reg = new RegExp("(^|&)"+ name +"=([^&a ...

  3. jchat:linux聊天程序4:客户端

    makefile: jchat: main.o login.o regist.o tcp.o gcc -w main.o login.o regist.o tcp.o -o jchat rm -f * ...

  4. Oracle EBS-SQL (INV-4):检查负库存记录数.sql

    DEFINE DATE1="01/15/20** 23:59:59"      /*输入指定日期*/DEFINE CODE="%"                ...

  5. 解决svn: Cannot negotiate authentication mechanism错误问题

    解决svn: Cannot negotiate authentication mechanism错误问题 作者:wangzz 原文地址:http://blog.csdn.net/wzzvictory/ ...

  6. java应用程序远程登录linux并执行其命令(ssh jar包)

    http://www.ganymed.ethz.ch/ssh2/在这个网址下载一个调用ssh和scp命令的jar包. 然后,就可以写程序了.将上面的jar包导入MyEclipse,下面是一个类的实例代 ...

  7. test for randomness

  8. 初识Java--线程同步(2)

    本文讲述Java中的线程同步和生产者消费者问题,其中主要涉及线程同步和wait().notify()方法的用法. wait和notify方法只能用在线程同步中,wait和notify是object的方 ...

  9. 【插队问题-线段树-思维巧妙】【poj2828】Buy Tickets

    可耻的看了题解 巧妙的思维 逆序插入,pos 代表的意义为前面要有pos个空格才OK: 证明:仔细思考一下就觉得是正确的,但是要想到这种方式还是要很聪明,空格是前面的几个数字所形成的,所以要特地留出来 ...

  10. 不能以方法的方式使用不可调用的“system.web.httprequest.querystring”

    问题描述:不能以方法的方式使用不可调用的“system.web.httprequest.querystring”解决办法:Request.QueryString["GoodsID" ...