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));  //hconsole.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总结,望各位大神多多指点,谢谢!

转载于:https://www.cnblogs.com/fms-3/p/10237714.html

slice,substring,substr的区别相关推荐

  1. JavaScript中String的slice(),substr(),substring()三者区别

    JavaScript中String的slice(),substr(),substring()三者区别 共同之处 从给定的字符串中截取片段,并返回全新的这片段的字符串对象,且不会改动原字符串. 具体不同 ...

  2. slice(),splice(),split(),substring(),substr()使用方法和区别

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

  3. JS中数组和字符串具有的方法,以及substring,substr和slice的用法与区别

     String 对象属性 属性 描述 constructor 对创建该对象的函数的引用 length 字符串的长度 prototype 允许您向对象添加属性和方法 String 对象方法 方法 描述 ...

  4. String.slice和String.substring有什么区别?

    本文翻译自:What is the difference between String.slice and String.substring? Does anyone know what the di ...

  5. JS截取字符串的三个方法substring,substr,slice

    原文地址:https://www.jb51.net/article/241122.htm js中有三个截取字符的方法,分别是substring().substr().slice(),平时我们可能都用到 ...

  6. JavaScript substr() 和 substring() 方法的区别

    JavaScript substr() 和 substring() 方法的区别 substr 方法 返回一个从指定位置开始的指定长度的子字符串. stringvar.substr(start [, l ...

  7. js中的extend的用法及其JS中substring与substr的区别

    1.    JS中substring与substr的区别 之前在项目中用到substring方法,因为C#中也有字符串的截取方法Substring方法,当时也没有多想就误以为这两种方法的使用时一样的. ...

  8. javascript中substring,substr和slice对比

    javascript中substring,substr和slice对比 欢迎访问我的博客https://qqqww.com/,祝所有码农同胞们早日走上人生巅峰,迎娶白富美~~ 先写下最终结论,这样方便 ...

  9. 三种JS截取字符串方法 slice(),substring()和substr()

    JS提供三个截取字符串的方法,分别是:slice(),substring()和substr(),它们都可以接受一个或两个参数: var stmp = "rcinn.cn"; 使用一 ...

最新文章

  1. 用阿里云镜像解决Maven速度慢问题
  2. Apollo 2.0发布前 试乘百度L3、L4级自动驾驶汽车
  3. CentOS7虚拟机优化
  4. 夜间排障某省某电信公司后台数据库故障
  5. azure云数据库_Azure SQL数据库上的透明数据加密(TDE)
  6. linux 日志编程(总结)
  7. CSDN Blog升级通告
  8. IP地址 0.0.0.0 是什么意思?
  9. IEnumerableIEnumerablestring结构解析通用解决方案(支持指定属性顺序)
  10. 蓝桥杯 错误票据——2013年省赛C/C++ A组
  11. excel公式和函数
  12. DDA数值微分法详解
  13. 稀疏表示 过完备字典
  14. mysql数据加表头导出_mysql导出数据到表格讲解大全(导出数据带表头,导出数据中文乱码问题解决)...
  15. 【渝粤题库】广东开放大学 财务会计(1) 形成性考核
  16. cmd操作 以及几个常用快捷键
  17. PCI/PCIE相关知识
  18. Lighttools中模拟白光LED
  19. JAVA实现经典游戏俄罗斯方块
  20. 职称计算机考试演示,2015职称计算机考试模拟题:演示文稿的放映、打包和打印...

热门文章

  1. 关于计算机组装的作文,电脑小白组装电脑,能写出这样的配置,在下佩服!
  2. java初反射_初始 java 反射机制 (一)
  3. r语言 svm 大样本_r语言基于SVM模型的文本分类研究 附数据代码
  4. oracle链接字符串java,java连Oracle连接字符串写法
  5. php和nginx安装脚本,Nginx + PHP 配置和启动脚本
  6. vue 心跳监控_【笔记】vue中websocket心跳机制
  7. 离散数学专业术语(continuous updating)
  8. MATLAB中的vpa函数简单实用记录——精度控制
  9. 【 Notes 】Best linear unbiased estimator(BLUE) approach for time-of-arrival based localisation
  10. mongodb高可用性架构---Replica Set