js字符串和数组操作,容易混淆的方法总结(slice、substring、substr、splice)
平时工作中,很少静下心来总结基础知识,总觉得自己会用了,有点飘了,直到碰壁之后才懂得基础知识的重要性。大牛告诉我,一次写对,是不是可以不用F12去调试了?是不是省了时间?简直是面红耳赤,无地自容。在这里记下来,以后不能再模棱两可!
因为这几个方法长的差不多,记起来也是相当费劲,今天特意花了点时间,理清楚每个方法的具体用法,这是小白的理解,请看到这篇文章的大牛多多支持!
1、首先说,字符串和数组都有slice(start, end)方法,英文翻译是“切片”的意思,我是这么记的:去医院做生理切片的时候,医生从你身上取某个组织,做成切片,对你的身体几乎没有影响,切片最后给出结论,到底人有没有生病。我们可以类比一下,这里的“切片”,对原数据来讲也可以忽略不计,所以slice不影响原数据,最后也会给出一个“结论”,有没有返回新的字数据。我不管,我先上代码了:
字符串的:
var str1 = 'abcde'
var str2 = str1.slice(1,3)
console.log(str1, str2)
//abcde bc
数组的:
var arr1 = ['a', 'b', 'c', 'd', 'e']
var arr2 = arr1.slice(1, 3)
console.log(arr1, arr2)
// ["a", "b", "c", "d", "e"] (2) ["b", "c"]
可以看出,经过slice操作,str1和arr1没有改变,str2和arr2都有了新的返回。start和end参数这里先知道是起始和结束索引就行了,后面和其他几个方法一起理解,会更容易记忆。
2、字符串特有的操作substring(start, end)和substr(start, count)
记了很多次了,三天后必忘……看来要发挥重复记忆的本领了,当然我知道这么记肯定还是会忘,认真下来,看看这俩单词,都有“str”三个字母,substring更是带劲,明显的给出“string”字符串的英文,这样就好记忆了,这两个方法只用于操作字符串,继续上代码:
var str1 = 'abcde'
var str2 = str1.substring(1, 3)
var str3 = str1.substr(1, 3)
console.log(str1, str2) // abcde bc
console.log(str1, str3) // abcde bcd
上面代码,substring不做解释了,和slice一样,注意substr第二个参数是要截取字符的个数,从start位置开始,截取count个。
.如果start和第二个参数传入负数,该会是什么表现?
var str1 = 'abcde'
var str2 = str1.slice(-1, -3)
var str3 = str1.substring(-1, -3)
var str4 = str1.substr(-1, -3)
console.log('str1 = ' + str1 + ', ', 'str2 = ' + str2 + ', ', 'str3 = ' + str3 + ', ', 'str4 = ' + str4)
// str1 = abcde, str2 = , str3 = , str4 =
看到结果了吧?str2、str3、str4 都是''(空字符串),为什么会这样?因为当传入负值的时候,三种方法处理机制不一样,解释一下:
slice()单词比较短,没那么强的控制力,给它什么就处理什么,给个负值,那就用字符串长度加上该负值;
substring()单词很完整,也很长,控制了很强,你给它负值,它不为所动,统统转成0;
substr() 也是个变异的家伙,第一个参数如果是负值,它也处理,用字符串长度加上该负值,但是第二个参数标识截取长度的,长度有负值吗?没有,所以转成0;
对应上述描述,上面的代码对应修改为:
var str1 = 'abcde'
var str2 = str1.slice(5 - 1, 3 - 3)
var str3 = str1.substring(0, 0)
var str4 = str1.substr(5 - 1, 0)
console.log('str1 = ' + str1 + ', ', 'str2 = ' + str2 + ', ', 'str3 = ' + str3 + ', ', 'str4 = ' + str4)
// str1 = abcde, str2 = , str3 = , str4 =
是不是和上次修改前的返回结果一致?好,那就说明我们这种记忆方法可以!
先总结一下字符串的操作:
a.slice和substring都是完整的单词,这两个是一对,第二个参数都是结束序列号,放在一起记忆,substr外观上不是一个完整的单词(str缺少‘ing’),比较特殊,它的第二个参数是个数count;
b.因为是字符串操作,字符串属于数据类型(后续会写文章介绍数据类型以及堆栈的释义https://www.cnblogs.com/whq920729/p/10662489.html)中,基本类型的一种,所以,无论我们怎么对原来的字符串操作,都不会改变原来的字符串,还能返回新的字符串。
c.如果两个参数都传入负数,slice都会用字符串长度加上该负数,substring()控制力很强,都转成0,substr(),第一个参数同slice的处理,第二个参数是长度,所以直接转成0。
再来看数组的处理,看完了上面三个方法,还剩下一个splice(start,count, items),那就给数组吧,当然它的英文翻译是裁剪胶片、磁带、视频等,处理视频可以删除某一段,也可以替换某一段,所以这里自然就记住了,splice()操作数组的时候,也有剪切和替换(items有值的时候执行替换功能)的功能。继续搬代码:
var arr1 = ['a', 'b', 'c', 'd', 'e']
var arr2 = arr1.splice(1, 3)
console.log(arr1, arr2)
// ["a", "e"] ["b", "c","d"]
var arr1 = ['a', 'b', 'c', 'd', 'e']
var arr3 = arr1.splice(1, 3, 'f')
console.log(arr1, arr3)
// ["a", "f", "e"] ["b", "c", "d"]
结果显然易见: 改变了原数组,并返回了新数组。第一个参数标识处理的起点序列号,第二个参数标识要处理的个数,第三个参数标识要不要替换。
这里传入负数会是什么结果呢?
var arr1 = ['a', 'b', 'c', 'd', 'e']
var arr3 = arr1.splice(-3, -1, 'f')
console.log(arr1, arr3)
// ["a", "b", "f", "c", "d", "e"] []
是不是等同于:
var arr1 = ['a', 'b', 'c', 'd', 'e']
var arr3 = arr1.splice(2, 0, 'f')
console.log(arr1, arr3)
// ["a", "b", "f", "c", "d", "e"] []
无论第一个参数转成0还是转成数组长度加上该负数,只要第二个长度参数是0了,那么splice()对原数组就没有任何操作了。
就说这么多,希望能帮记不住这几个方法的同学,这只是一种记忆方法,如果有更好的记忆方法,请赐教!
js字符串和数组操作,容易混淆的方法总结(slice、substring、substr、splice)的更多相关文章
- JS与PHP数组操作的不同
JS与PHP数组操作的不同 1.JS 中向数组中添加元素,必须指定下标 2.php中向数组中添加元素,可以不指定下标(追加) 3.JS 中数组元素的下标,是连续 4.PHP中数组元素的下标,可以不连续 ...
- codewars--js--the highest and lowest number + JS 字符串和数组相关知识
本文参考: http://blog.csdn.net/tyrionj/article/details/78653426 http://www.runoob.com/jsref/jsref-obj-st ...
- Java数组操作的10大方法
转载自码农网 译文链接:http://www.codeceo.com/article/10-java-array-method.html 英文原文:Top 10 Methods for Java Ar ...
- JavaScript进阶(四)js字符串转换成数字的三种方法
js字符串转换成数字的三种方法 在js读取文本框或者其它表单数据的时候获得的值是字符串类型的,例如两个文本框a和b,如果获得a的value值为11,b的value值为9 ,那么a.value要小于b. ...
- 3个js函数 变成数组本身的3个方法
<!DOCTYPE html> 3个js函数 变成数组本身的3个方法 /** * 稀疏数组 变成不稀疏数组 * @params array arr 稀疏数组 * @return arry ...
- js变量作为数组对象的键值方法
js变量作为数组对象的键值方法,变量键值获取数组值 js也可以像php的数组一样用下标获取数组的值,方法是: var arr = {'key':'abc'}; var key = 'key'; con ...
- 字符串截取函数slice, substring, substr
在日常项目需求中,常常会遇到需要截取字符串操作的工作,而ECMAScript为我们提供了原生的截取字符串的函数,而且提供了三个:slice, substring, substr.我们怎么判断在什么时候 ...
- 从js的repeat方法谈js字符串与数组的扩展方法
js将字符串重复N次的repeat方法的8个版本 /* *@desc: 将一个字符串重复自身N次 */ //版本1:利用空数组的join方法 function repeat(target, n) { ...
- (js) 字符串和数组的常用方法
JS中字符串和数组的常用方法 JS中字符串和数组的常用方法 js中字符串常用方法 查找字符串 根据索引值查找字符串的值 根据字符值查找索引值 截取字符串的方法 字符串替换 字符串的遍历查找 字符串转化 ...
随机推荐
- MFC中修改程序图标
在使用MFC时,我们经常需要修改我们得到的exe文件的图标.如:写一个随机画圆的小程序,我们就希望该程序的图标是个圆或者是和圆有关的图标.所以,在这里我就记录一下我修改图标的步骤. 顺便提一下,我使用 ...
- func && operation_yes || operation_no (Shell)
通过&&, || 理解shell中的函数返回值. 我想实现如下功能: 写一个函数判断一个字符串中是否只包含数字,并返回相应的标志(是/否); 通过调用上面的函数,判断给定的字符串是否只 ...
- 做测试时,启动SpringBoot出现警告,在ClassPath中一个类多次出现
Found multiple occurrences of org.json.JSONObject on the class path: jar:file:/C:/Users/niaomingjian ...
- Google Cloud Platfrom中使用Linux VM
Linkes https://cloud.google.com/compute/docs/quickstart-linuxhttps://console.cloud.google.com/comput ...
- docker helloworld
阿里云镜像: docker官网 docker官方安装文档 配置阿里云镜像后,重启服务,以及检测服务是否正确启动 docker version.info.--help linux帮助命令man ls 镜 ...
- node+npm安裝配置
控制臺輸入node 根據提示安裝 sudo apt-get install -g npm配置淘寶源 npm config set registry https://registry.npm.tao ...
- 详尽全面的matlab绘图教程
Matlab绘图 强大的绘图功能是Matlab的特点之一,Matlab提供了一系列的绘图函数,用户不需要过多的考虑绘图的细节,只需要给出一些基本参数就能得到所需图形,这类函数称为高层绘图函数.此外,M ...
- 在安装mysqli的时候,出现error: ext/mysqlnd/mysql_float_to_double.h: No such file or directory
/application/php5.:: warning: /ext/mysqli/mysqli_api.c::: error: ext/mysqlnd/mysql_float_to_double.h ...
- INSPIRED启示录 读书笔记 - 第27章 合理运用瀑布式开发方法
瀑布式开发方法的基本原则 1.采用阶段式开发:软件开发过程被事先分成固定的几个阶段,撰写书面的需求说明文档.设计高层软件架构.设计低层细节.编写代码.测试.部署 2.采用阶段式评审:每个阶段结束后,对 ...
- C#中利用WebBrowser控件,获得HTML源码
最近获得网页的几个老程序都不能用了. 我原来用 如下代码获得网页html 源码: <pre name="code" class="csharp"> ...