slice,substring,substr的区别
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的区别的更多相关文章
- 字符串截取slice() substring() substr()的区别?
获取子字符串 slice() substr() substring() 不会修改字符串本身,他们只是返回一个基本类型的字符串值 var str='abcdefghijklmn'; ...
- JS字符串截取函数slice(),substring(),substr()的区别
在JS中,slice().substring().substr()都有截取字符串的作用,那他们有哪些用法上的区别呢?如果你也有疑惑,这篇文章或许能够帮助到你. 一.substring() substr ...
- 字符串截取函数slice, substring, substr
在日常项目需求中,常常会遇到需要截取字符串操作的工作,而ECMAScript为我们提供了原生的截取字符串的函数,而且提供了三个:slice, substring, substr.我们怎么判断在什么时候 ...
- 关于js的string的3个函数slice,substring,substr对比
slice,substring,substr三个函数都是截取字符串,但是对参数的处理有区别 参数处理相似的两个函数式slice和substring slice(start,end)和substring ...
- substring、slice、substr的区别
首先定义一个变量便于下面测试:var str = "xx351223441"; substring: str.substring(form,to):从字符串里截取下标为form ...
- 怎样理解String的slice(), subString(), substr()三个方法
String.prototype.slice() 是js字符串的切片工具方法, 用于对字符串做'裁剪'操作, 不改变原字符串. 'helloworld'.slice(0,5); // 'hello'; ...
- js中slice(),splice(),split(),substring(),substr()的使用方法和区别
1.slice(): Array和String对象都有 在Array中 slice(i,[j]) i为开始截取的索引值,负数代表从末尾算起的索引值,-1为倒数第一个元素j为结束的索引值,缺省时则获取 ...
- slice()、substring()、substr()的区别用法
在js中字符截取函数有常用的三个slice().substring().substr()了,下面我来给大家介绍slice().substring().substr()函数在字符截取时的一些用法与区别吧 ...
- slice、substring、substr的区别
首先它们都接收两个参数,slice和substring接收的是起始位置与结束位置,而substr接收的是起始位置和所要截取的字符长度. 特殊注意: 当第二参数大于第一个参数时,slice会返回空字 ...
随机推荐
- node.js浅见
看过很多朋友node.js代码敲得很好,但是对于概念还是很生疏.个人认为,代码是树叶,树干搭起来才是王道. 1.简述node.js的适用场景: IIO密集而非计算密集的情景:高并发微数据(比如账号系统 ...
- SQL-递归查询在Ora与Mssql
今天在工作中,有同事“请教”从 Sql Server 移植数据到 DM DB 的改写问题,本以为难度不大,结果发现 Sql Server 数据库的语法.架构上,与 Oracle / DM 数据库差异还 ...
- shell之for和if实现批量替换多目录下的文件
问题背景: 生产环境的项目图片文件夹众多,每个项目都会有一个图片文件夹,现在要批量替换每个文件夹下的一张模板图片 如图,我们要替换每一个文件夹下的01.jpg shell 脚本 #/bin/bash ...
- webdriver之富文本,Firefox配置加载
chrome驱动下载:http://chromedriver.storage.googleapis.com/index.html 加载浏览器配置,需要用FirefoxProfile(profile_d ...
- IP包设计
IP包 IP核(Intellectual Property core)就是知识产权核或知识产权模块的意思,用于配置FPGA或其它硅芯片上的逻辑资源. 引用链接https://blog.csdn.net ...
- memcached、cookie、session
Memcached(一个高性能的分布式的内存对象缓存系统) 可用来分担数据库的压力.通过在内存里维护一个统一的巨大的hash表,memcached能存储各种各样的数据,包括图像.视频.文件.以及数据库 ...
- 2019 面试准备 - JS 防抖与节流 (超级 重要!!!!!)
Hello 小伙伴们,如果觉得本文还不错,记得给个 star , 你们的 star 是我学习的动力!GitHub 地址 本文涉及知识点: 防抖与节流 重绘与回流 浏览器解析 URL DNS 域名解析 ...
- 哆啦A梦css
<!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- shell for 循环
test.sh #!/bin/bash for str in "C语言" "http://www.bilibili.com" "成立7年了" ...
- 实验八 <FBG> 基于原型的团队项目需求调研与分析
<FBG>团队项目原型设计:http://www.cnblogs.com/ymm3/p/9012534.html GitHub的链接地址:https://github.com/FBGfbg ...