当前位置: 首页 > article >正文

slice()、substring()、substr()三者的区别

三种常用截取字符串方法

  • slice():截取字符串的某个部分,返回被提取的部分。

  • substring(indexStart, indexEnd):返回一个字符串在开始索引到结束索引之间的字符串。省略indexEnd,则提取字符一直到字符串末尾。

  • substr():接受一个或者两个参数,第一个参数指定子字符串的开始位置。第二个参数跟之前的方法有些区别,表示返回的字符个数。如果没有传递第二个参数,则将字符串的长度作为结束位置。

slice()、substring()、substr() 三者的区别

1. IE兼容性

  • slice() 在IE8浏览器测试下,没啥问题,行为与现代浏览器一致
  • substring() 在IE8浏览器测试下,没啥问题,行为与现代浏览器一致
  • substr() 传递负值的情况下会存在问题,会返回原始的字符串。IE9修复了此问题

2. 传递正值

  • slice()substring() 行为相同,第二个参数表示字符串的结束位置(不包括结束位置的那个字符)
  • substr() 第二个参数表示返回的字符个数

3. 传递负值

  • slice() 会将传入的负值与字符串长度相加
  • substring() 不接受负的参数,substring()方法会把所有负值参数转换为0
  • substr() 方法会将负的第一个参数加上字符串的长度,而将负的第二个参数转换为0,且负值情况下会出现IE兼容性问题

综上所述:一般推荐使用slice()方法。

let str ="helloWorld";

// ---------------------------slice----------------------------------
// 一个参数,则将字符串长度作为结束位置
console.log(str.slice(3)); // "loWorld"
// 两个参数,7位置上的字符为"r",但不包括结束位置的字符
console.log(str.slice(3,7)); // "loWo"
// 一个参数,与字符串长度相加即为slice(7)
console.log(str.slice(-3)); // "rld"
// 两个参数,与字符串长度相加即为slice(3,6)
console.log(str.slice(3,-4)); // "loW"
// slice()方法传入的第二个参数比第一个参数小的话,则返回空字符串
console.log(str.slice(5,3)); // ""

// ---------------------------substring----------------------------------
// 一个参数,则将字符串长度作为结束位置
console.log(str.substring(3)); // "loWorld"
// 两个参数,7位置上的字符为"r",但不包括结束位置的字符
console.log(str.substring(3,7)); // "loWo"
// 两个参数,-4会转换为0,相当于substring(3,0) -->即为 substring(0,3)
// substring()方法会将较小的数作为开始位置,将较大的数作为结束位置。所以substring(3,0) 与substring(0,3)是一样效果的
console.log(str.substring(3,-4)); // "hel"

// ---------------------------substr----------------------------------
// 一个参数,则将字符串长度作为结束位置
console.log(str.substr(3)); // "loWorld"
// 两个参数,从位置3开始截取后面7个字符
console.log(str.substr(3,7)); // "loWorld"
// 将第一个负的参数加上字符串的长度--->
// 即为:substr(7,5) ,从位置7开始向后截取5个字符
console.log(str.substr(-3,5)); // "rld"
// 将第二个参数转换为0
// 即为:substr(3,0),即从位置3截取0个字符串,则返回空
console.log(str.substr(3,-2)); // ""

http://www.kler.cn/a/2547.html

相关文章:

  • Taro+Vue实现图片裁剪组件
  • Elasticsearch:Query rules 疑难解答
  • vivado时序约束和优化
  • 从零开始:使用VSCode搭建Python数据科学开发环境
  • 比较procfs 、 sysctl和Netlink
  • halcon三维点云数据处理(七)find_shape_model_3d_recompute_score
  • Windows权限提升 —SQL Server/MSSQL数据库提权
  • Selenium+Pytest自动化测试框架实战,还不会点这里一清二楚,全网最细教程!
  • 基于点云的深度学习方法预测蛋白-配体结合亲和力【Briefings in Bioinformatics, 2022】
  • 【27】Verilog进阶 - 状态机的三种描述方式
  • 安装KVM并创建虚拟机及基本使用
  • vue2图片预览插件
  • KDGX-A光缆故障断点检测仪
  • 【C语言】通讯录的实现(静态版)
  • C++演讲比赛流程管理系统_黑马
  • 这些IT行业趋势,将改变2023
  • 使用Android架构模板
  • 操作系统(1.2)--引论
  • PlotNeuralNet + ChatGPT创建专业的神经网络的可视化图形
  • 【云原生】k8s集群命令行工具kubectl之集群管理命令
  • 2023年顶级编程语言趋势
  • 鸟哥的Linux私房菜 正则表示法与文件格式化处理
  • C语言—程序环境和预处理(1)
  • IOS - 某驾宝典篇
  • 举一反三学python(3)---海龟绘图
  • 嵌入式常使用的库函数