博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
(转)substring和substr以及slice和splice的用法和区别
阅读量:2240 次
发布时间:2019-05-09

本文共 3625 字,大约阅读时间需要 12 分钟。

转载地址:

那么就由一道笔试题引入吧,已知有字符串a=”get-element-by-id”,写一个function将其转化成驼峰表示法”getElementById”;
var a = "get-element-by-id";function change(obj){  //先将字符串按照“-”进行切割为数组  var arr = obj.split("-");  for(var i=1;i
 

这里substring(1)的意思就是从下标1开始一直到字符串结尾处。但是参考写法提供的此处代码是substr(1,arr[i].length-1)

好吧,我承认虽然知道substring和substr都是对字符串进行截取操作,但两者之间的细化区别确实比较模糊,那么这里除了这两个小兄弟,也带上slice与splice就做个使用汇总吧。

一、关于substring()

substring(start,stop)表示返回从start开始到stop处之间的新字符串,其长度为stop减 start。包含start,但不包含stop,且不修改原字符串。这一点与slice的含头不含尾相近。例如:

 
var str = "0123456789";console.log(str.substring(1,5))//"1234" length为5-1console.log(str.substring(0,9),str)//"012345678"  "0123456789"
 

其中start是必填项,stop为选填项,如果stop不填,那表示从start截取到字符串结尾,例如:

 
var str = "0123456789";console.log(str.substring(1))//"123456789"
 

如果 start比stop大,那么方法在执行前会先交换这两个参数。例如:

 
var str = "0123456789";console.log(str.substring(8,4))//"4567"
 

如果 start与stop相等,那么会返回一个空的字符串。例如:

 
var str = "0123456789";console.log(str.substring(6,6))//""
 

如果 start或stop为负数,那么方法在执行前会先将负数变为0。例如:

 
var str = "0123456789";console.log(str.substring(-2,6))//"012345"console.log(str.substring(2,-6))//"01"console.log(str.substring(-2,-6))//""
 

二、关于substr()

substr(start,length)表示返回从start开始包含length长度的新字符串,包含start,且不修改原字符串,与substring相比,第二个参数由代表结束的下标stop变成了规定新字符串长度的length,例如:

 
var str = "0123456789";console.log(str.substr(1,5))//"12345" length为5console.log(str.substr(2,6),str)//"234567" "0123456789"
 

其中start是必填项,length为选填项,如果length不填,那表示从start截取到字符串结尾,例如:

 
var str = "0123456789";console.log(str.substr(1))//"123456789"
 

如果start为负数,那么start=str.length+start,例如:

 
var str = "0123456789";console.log(str.substr(-1))//"9"console.log(str.substr(-6,3))//"456"
 

如果length为负数或者0,那么返回空字符串,例如:

 
var str = "0123456789";console.log(str.substr(1,0))//""console.log(str.substr(-1,-1))//""console.log(str.substr(-1,0))//""
 

三、关于slice()

 首先要说的是,slice可操作数组和字符串,但substring和substr只能操作字符串,splice只能操作数组。

slice(start,stop)表示截取从下标start 到下标stop(不包括该元素)的之间的元素,并返回新数组/新字符串,并不修改原数组/原字符串,这点上面说了,与substring很相似。例如:

 
var str = "0123456789";    arr = [0,1,2,3,4,5,6,7,8,9];console.log(str.slice(1,6))//"12345"console.log(arr.slice(1,6))//[1,2,3,4,5]
 

其中start是必填项,stop为选填项,如果stop不填,那表示从start截取到数组结尾/字符串结尾,例如:

 
var str = "0123456789";    arr = [0,1,2,3,4,5,6,7,8,9];console.log(str.slice(1))//"123456789"console.log(arr.slice(1))//[1,2,3,4,5,6,7,8,9]
 

如果 start比stop大(不会互换),或start与stop相等,则截取的为空,例如:

 
var str = "0123456789";    arr = [0,1,2,3,4,5,6,7,8,9];console.log(str.slice(3,3))//""console.log(arr.slice(3,3))//[]console.log(str.slice(6,5))//""console.log(arr.slice(6,5))//[]
 

需要特别注意的是,如果 start或者stop为负数,那么负数的选项从数组尾部开始算起的位置,最后一个数字为-1,倒数第二个数字为-2,依次类推。例如:

 
var str = "0123456789";console.log(str.slice(6,-1))//"678"console.log(str.slice(-6,-1))//"45678"console.log(str.slice(-6,8))//"4567"
 

三、关于splice()

还是再强调一遍,slice可操作字符串和数组,但是splice不能操作字符串,会报错。

splice(start,length,items)表示从下标start处截取length长度(与substr有点像)的元素后,在start处为原数组添加items,并返回被截取的新数组,splice会直接修改原数组,例如:

 
var arr = [0,1,2,3,4,5,6,7,8,9];console.log(arr.splice(1,3,2,3,4))//[1,2,3]console.log(arr);//[0,2,3,4,4,5,6,7,8,9] 原数组被截取走了1,2,3,并加入了2,3,4
 

其中start和length为必填项,items为选填项,如果length为0或者负数,则返回空数组(这里与substr相似),例如:

 
var arr = [0,1,2,3,4,5,6,7,8,9];console.log(arr.splice(1,0,2,3,4))//[]console.log(arr);//[0,2,3,4,1,2,3,4,5,6,7,8,9] 直接在原数组下标0处并加入了2,3,4
 
var arr = [0,1,2,3,4,5,6,7,8,9];console.log(arr.splice(1,-9,2,3,4))//[]console.log(arr);//[0,2,3,4,1,2,3,4,5,6,7,8,9] 直接在原数组下标0处并加入了2,3,4

如果start为负数,则原理和slice负数从右往左截取,最后一位数字为-1,倒数第二位为-2,依次类推,例如:

 
var arr = [0,1,2,3,4,5,6,7,8,9];console.log(arr.splice(-1,1,2,3,4))//[9]console.log(arr);//[0,1,2,3,4,5,6,7,8,2,3,4] 从右往左截取1位,也就是9,并加入2,3,4
 

 

 

转载于:https://www.cnblogs.com/zhaobao1830/p/7163827.html

你可能感兴趣的文章
【托业】【新东方托业全真模拟】TEST05~06-----P5~6
查看>>
【托业】【新东方托业全真模拟】TEST09~10-----P5~6
查看>>
【托业】【新东方托业全真模拟】TEST07~08-----P5~6
查看>>
solver及其配置
查看>>
JAVA多线程之volatile 与 synchronized 的比较
查看>>
Java集合框架知识梳理
查看>>
笔试题(一)—— java基础
查看>>
Redis学习笔记(三)—— 使用redis客户端连接windows和linux下的redis并解决无法连接redis的问题
查看>>
Intellij IDEA使用(一)—— 安装Intellij IDEA(ideaIU-2017.2.3)并完成Intellij IDEA的简单配置
查看>>
Intellij IDEA使用(二)—— 在Intellij IDEA中配置JDK(SDK)
查看>>
Intellij IDEA使用(三)——在Intellij IDEA中配置Tomcat服务器
查看>>
Intellij IDEA使用(四)—— 使用Intellij IDEA创建静态的web(HTML)项目
查看>>
Intellij IDEA使用(五)—— Intellij IDEA在使用中的一些其他常用功能或常用配置收集
查看>>
Intellij IDEA使用(六)—— 使用Intellij IDEA创建Java项目并配置jar包
查看>>
Eclipse使用(十)—— 使用Eclipse创建简单的Maven Java项目
查看>>
Eclipse使用(十一)—— 使用Eclipse创建简单的Maven JavaWeb项目
查看>>
Intellij IDEA使用(十三)—— 在Intellij IDEA中配置Maven
查看>>
面试题 —— 关于main方法的十个面试题
查看>>
集成测试(一)—— 使用PHP页面请求Spring项目的Java接口数据
查看>>
使用Maven构建的简单的单模块SSM项目
查看>>