1.都为正整数
//例子数据
var arr = [1,2,3,4,5,6,7],
var str = "helloworld!"; //注意这里有个!号也算一位若有空格,空格也算一位 console.log(str.slice(1)); //elloworld!
console.log(str.substring(1)); //elloworld!
console.log(str.substr(1)); //elloworld! console.log(arr.slice(1)); //[2,3,4,5,6,7]
console.log(arr.substr(1)); //TypeError: arr.substr is not a function
console.log(arr.substring(1)); //TypeError: arr.substring is not a function 数组是没有substr和substring方法的,含str的都是字符串专用

2.都是正整数第一个小于第二个

//例子不变
console.log(str.slice(1,4)); //ell 不包含结束位1起始位,4结束位
console.log(str.substring(1,4)); //ell 不包含结束位1起始位,4结束位
console.log(str.substr(1,4)); //ello 不一致了!!! console.log(arr.slice(1,4)); //[2,3,4] 不包含结束位1起始位,4结束位

  

3. 都使用两个正数参数(第一个大于第二个):
var arr = [1,2,3,4,5,6,7],
var str = "helloworld!";
console.log(str.slice(5,1)); //""
console.log(str.substring(5,1)); //ello
console.log(str.substr(5,1)); //"w" console.log(arr.slice(5,1)); //[]

  substring会将此情况的位置自动调换,然后截取出相应的值;substr当然按照原意从第5个位置开始,截取1位返回一个字符;而slice直接返回空,slice的第一参数必须要小于等于第二参数才有效

4。前正后负

var arr = [1,2,3,4,5,6,7],
var str = "helloworld!";
console.log(str.slice(1,-2)); //elloworl
console.log(str.substr(1,-2)); //""
console.log(str.substring(1,-2)); //h console.log(arr.slice(1,-2)); //[ 2, 3, 4, 5]

slice第二参数为负数时,是从尾部倒数来计算或者说是与字符串或数组的长度相加得出的结果来计算;而substring, 无论第二参数是负多少,都只截取了第一个字符;substr同样,个数不可能是负数,所以是空;总结substring和substr第二参数为负数时其实是无效果的。

5.前负后正

//例子不变
console.log(str.slice(-3,1)) //""
console.log(str.substr(-3,1)) //l
console.log(str.substring(-3,1)) //h console.log(arr.slice(-3,1)) //[]

slice结果是空,这个结合第3和第4种情况,可知,这个实际是slice(4,1),第一参数大于第二参数了,所以是无效的,空值;substring,结合第3和第4种情况,是调换了顺序,但是还是负数,依然也是无效的,只返回第一个字符;substr,第一参数负数同样代表从尾部倒数或者字符串的长度相加得出的结果来计算,等同于substr(8,1),截取栗子中的一位,得到了“l”。
6.全为负数

//例子不变
console.log(str.slice(-1,-5));
console.log(str.substr(-1,-5));
console.log(str.substring(-1,-5)); console.log(arr.slice(-1,-5));
//上面的结果全是空 console.log(str.slice(-5,-1)); //orld
console.log(str.substr(-5,-1)); //""
console.log(str.substring(-5,-1)); //"" console.log(arr.slice(-5,-1)); //[ 3, 4, 5, 6 ]

总结:

1.slice,substring,substr 都是用来截取字符串的,然而数组只能使用slice,这三者如果不传参数,则都返回全部内容;

2.  参数为正数时,只有substring会自动调换顺序,slice在第一参数大于第二参数时会无效返回空,而substr无所谓,除非给定的第一参数超出了源数据长度才会返回空;

3. 参数为负数时,只有substring会永远无效,即不要给substring使用负值!slice可认为从尾部倒数,或者直接用源数据长度加上这个负值换算为正数,然后结论依然遵循第2条所述;而substr,则只适用第一参数为负数,换算方法同slice,其第二参数代表截取的个数,是不能为负数的;

以上内容通过个人学习,博客项目学习,w3c总结,望各位大神多多指点,谢谢!

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

  1. 字符串截取slice() substring() substr()的区别?

    获取子字符串 slice()        substr()    substring() 不会修改字符串本身,他们只是返回一个基本类型的字符串值 var str='abcdefghijklmn'; ...

  2. JS字符串截取函数slice(),substring(),substr()的区别

    在JS中,slice().substring().substr()都有截取字符串的作用,那他们有哪些用法上的区别呢?如果你也有疑惑,这篇文章或许能够帮助到你. 一.substring() substr ...

  3. 字符串截取函数slice, substring, substr

    在日常项目需求中,常常会遇到需要截取字符串操作的工作,而ECMAScript为我们提供了原生的截取字符串的函数,而且提供了三个:slice, substring, substr.我们怎么判断在什么时候 ...

  4. 关于js的string的3个函数slice,substring,substr对比

    slice,substring,substr三个函数都是截取字符串,但是对参数的处理有区别 参数处理相似的两个函数式slice和substring slice(start,end)和substring ...

  5. substring、slice、substr的区别

    首先定义一个变量便于下面测试:var str = "xx351223441";   substring: str.substring(form,to):从字符串里截取下标为form ...

  6. 怎样理解String的slice(), subString(), substr()三个方法

    String.prototype.slice() 是js字符串的切片工具方法, 用于对字符串做'裁剪'操作, 不改变原字符串. 'helloworld'.slice(0,5); // 'hello'; ...

  7. js中slice(),splice(),split(),substring(),substr()的使用方法和区别

    1.slice(): Array和String对象都有 在Array中  slice(i,[j]) i为开始截取的索引值,负数代表从末尾算起的索引值,-1为倒数第一个元素j为结束的索引值,缺省时则获取 ...

  8. slice()、substring()、substr()的区别用法

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

  9. slice、substring、substr的区别

    首先它们都接收两个参数,slice和substring接收的是起始位置与结束位置,而substr接收的是起始位置和所要截取的字符长度.   特殊注意: 当第二参数大于第一个参数时,slice会返回空字 ...

随机推荐

  1. 外网访问内网MariaDB数据库

    外网访问本地MariaDB数据库 本地安装了MariaDB数据库,只能在局域网内访问,怎样从公网也能访问内网MariaDB数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动Mar ...

  2. Linux 下的分屏利器-tmux安装、原理及使用

    >> 原文地址

  3. flutter 读取sdcard权限问题相关

    https://stackoverflow.com/questions/46698751/permission-denied-at-externalstoragedirectory-access-vi ...

  4. Hadoop2-HDFS学习笔记之入门(不含YARN及MR的调度功能)

    架构 Hadoop整体由HDFS.YARN.MapReduce三大部分组成,推荐架构参考:https://www.cnblogs.com/zhjh256/p/10573684.html. 注:2.x的 ...

  5. Oracle 12 Rman增量备份

    增量备份 增量备份主要作用是仅复制自上次备份以来已更改的数据块.您可以使用RMAN创建数据文件,表空间或整个数据库的增量备份. 将增量备份作为策略的一部分的主要原因是: 用于基于增量更新备份的策略,其 ...

  6. 智能化脚本autoit v3的简单了解

    AutoIt v3 是一个类似 BASIC 脚本语言的免费软件, 它设计用于 Windows GUI(图形用户界面) 中进行自动化操作. 利用模拟键盘按键, 鼠标移动和窗口/控件的操作实现自动化任务. ...

  7. windows修改注册表添加开启自启动

    快捷键win+R regedit 计算机\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run 新建字符串值 C:\soft ...

  8. HDU 2665 Kth number(主席树静态区间第K大)题解

    题意:问你区间第k大是谁 思路:主席树就是可持久化线段树,他是由多个历史版本的权值线段树(不是普通线段树)组成的. 具体可以看q学姐的B站视频 代码: #include<cmath> #i ...

  9. asp.net mvc 跨域配置

    修改 web.config 文件 <system.webServer> <httpProtocol> <customHeaders> <add name=&q ...

  10. HackerRank-Python攻城歷程-2.List comprehensions

    if __name__ == '__main__': x = int(input()) y = int(input()) z = int(input()) n = int(input()) print ...