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

共同之处

从给定的字符串中截取片段,并返回全新的这片段的字符串对象,且不会改动原字符串。

具体不同之处

slice()

str.slice(beginIndex[, endIndex])
参数 描述
beginIndex 从该索引(以 0 为基数)处开始提取原字符串中的字符(包含)。如果值为负数,会被当做 strLength + beginIndex 看待,这里的strLength 是字符串的长度(例如, 如果 beginIndex 是 -3 则看作是:strLength - 3)
endIndex 可选。在该索引(以 0 为基数)处(该索引下有字符,不包含)结束提取字符串。如果省略该参数,slice() 会一直提取到字符串末尾。如果该参数为负数,则被看作是 strLength + endIndex,这里的 strLength 就是字符串的长度(例如,如果 endIndex 是 -3,则是, strLength - 3)。

描述

slice() 从一个字符串中提取字符串并返回新字符串。在一个字符串中的改变不会影响另一个字符串。也就是说,slice 不会修改原字符串(只会返回一个包含了原字符串中部分字符的新字符串)。

slice() 提取的新字符串包括beginIndex但不包括 endIndex。下面有两个例子。

例 1:str.slice(1, 4) 提取第二个字符到第四个字符(被提取字符的索引值(index)依次为 1、2,和 3)。

例 2:str.slice(2, -1) 提取第三个字符到倒数第一个字符。


例子

var str1 = 'The morning is upon us.', // str1 的长度 length 是 23。str2 = str1.slice(1, 8),str3 = str1.slice(4, -2),str4 = str1.slice(12),str5 = str1.slice(30);
console.log(str2); // 输出:he morn
console.log(str3); // 输出:morning is upon u
console.log(str4); // 输出:is upon us.
console.log(str5); // 输出:""//传入了负值作为索引
var str = 'The morning is upon us.';
str.slice(-3);     // 返回 'us.'
str.slice(-3, -1); // 返回 'us'
str.slice(0, -1);  // 返回 'The morning is upon us'

substr()

str.substr(start[, length])

警告: 尽管 String.prototype.substr(…) 没有严格被废弃 (as in “removed from the Web standards”), 但它被认作是遗留的函数并且可以的话应该避免使用。它并非JavaScript核心语言的一部分,未来将可能会被移除掉。如果可以的话,使用 substring() 替代它.

参数 描述
start 开始提取字符的位置。如果为负值,则被看作 strLength + start,其中 strLength 为字符串的长度(例如,如果 start 为 -3,则被看作 strLength + (-3))。
length 可选。提取的字符数。

描述

start 是一个字符的索引。首字符的索引为 0,最后一个字符的索引为 字符串的长度减去1。substr 从 start 位置开始提取字符,提取 length 个字符(或直到字符串的末尾)。

  1. 如果 start 为正值,且大于或等于字符串的长度,则 substr 返回一个空字符串。
  2. 如果 start 为负值,则 substr 把它作为从字符串末尾开始的一个字符索引。如果 start 为负值且 abs(start) 大于字符串的长度,则 substr 使用 0 作为开始提取的索引。
  3. 如果 length 为 0 或负值,则 substr 返回一个空字符串。如果忽略 length,则 substr 提取字符,直到字符串末尾。

例子

var str = "abcdefghij";console.log("(1,2): "    + str.substr(1,2));   // (1,2): bc
console.log("(-3,2): "   + str.substr(-3,2));  // (-3,2): hi
console.log("(-3): "     + str.substr(-3));    // (-3): hij
console.log("(1): "      + str.substr(1));     // (1): bcdefghij
console.log("(-20, 2): " + str.substr(-20,2)); // (-20, 2): ab
console.log("(20, 2): "  + str.substr(20,2));  // (20, 2):

substring()

str.substring(indexStart[, indexEnd])
参数 描述
indexStart 需要截取的第一个字符的索引,该索引位置的字符作为返回的字符串的首字母。
indexEnd 可选。一个 0 到字符串长度之间的整数,以该数字为索引的字符不包含在截取的字符串内。

描述
substring 提取从 indexStart 到 indexEnd(不包括)之间的字符。特别地:

  • 如果 indexStart 等于 indexEnd,substring 返回一个空字符串。
  • 如果省略 indexEnd,substring 提取字符一直到字符串末尾。
  • 如果任一参数小于 0 或为 NaN,则被当作 0。
  • 如果任一参数大于 stringName.length,则被当作 stringName.length。
  • 如果 indexStart 大于 indexEnd,则 substring 的执行效果就像两个参数调换了一样。见下面的例子。

例子

var anyString = "Mozilla";// 输出 "Moz"
console.log(anyString.substring(0,3));
console.log(anyString.substring(3,0));
console.log(anyString.substring(3,-3));
console.log(anyString.substring(3,NaN));
console.log(anyString.substring(-2,3));
console.log(anyString.substring(NaN,3));// 输出 "lla"
console.log(anyString.substring(4,7));
console.log(anyString.substring(7,4));// 输出 ""
console.log(anyString.substring(4,4));// 输出 "Mozill"
console.log(anyString.substring(0,6));// 输出 "Mozilla"
console.log(anyString.substring(0,7));
console.log(anyString.substring(0,10));//下面一个例子运用了 String.length 属性去获取指定字符串的倒数元素。
//显然这个办法更容易记住,因为你不再像上面那个例子那样去记住起始位置和最终位置。// Displays 'illa' the last 4 characters
var anyString = 'Mozilla';
var anyString4 = anyString.substring(anyString.length - 4);
console.log(anyString4);// Displays 'zilla' the last 5 characters
var anyString = 'Mozilla';
var anyString5 = anyString.substring(anyString.length - 5);
console.log(anyString5);

参考资料

  1. String.prototype.slice() - JavaScript | MDN
  2. String.prototype.substr() - JavaScript | MDN
  3. String.prototype.substring() - JavaScript | MDN
  4. JavaScript中substr(),substring(),slice()区别

JavaScript中String的slice(),substr(),substring()三者区别相关推荐

  1. slice,substr,substring三者的区别

    我们先看一段简单的输出对比 var a = 'hellojavascript' console.log(a.slice(3,5));//lo console.log(a.substring(3,5)) ...

  2. JavaScript中string与number

    JavaScript中string与number string字符串 将一个值使用'单引号或者"双引号,引用起来就是字符串. ES6提供了反引号定义一个字符串,可以支持多行,还支持插值. l ...

  3. java两字符串是否相等_Java与JavaScript中判断两字符串是否相等的区别

    JavaScript是一种常用的脚本语言,这也决定了其相对于其他编程语言显得并不是很规范.在JavaScript中判断两字符串是否相等 直接用==,这与C++里的String类一样.而Java里的等号 ...

  4. java中String new和直接赋值的区别

        Java中String new和直接赋值的区别     对于字符串:其对象的引用都是存储在栈中的,如果是编译期已经创建好(直接用双引号定义的)的就存储在常量池中,如果是运行期(new出来的)才 ...

  5. html5有foreach吗,JavaScript中的map()和forEach()有什么区别?

    来源:https://medium.com/better-programming,作者:Moon,翻译:公众号<前端全栈开发者> JavaScript中一些最受欢迎的功能可能是map和fo ...

  6. JavaScript中的name和classname有什么区别

    JavaScript 中的 name 和 className 有如下区别: name 属性通常用于表示 HTML 元素的名称,如表单元素中的 input 元素.它可以用于给服务器发送数据. class ...

  7. js 字符串截取_【js】让你一次性搞清楚slice,substr,substring字符串截取函数

    假设 str是个字符串变量,且设置值为"LittleAnn",字符长度是9 那么这三个函数使用方式: var 相同点: start为开始位置下标,end为结束位置下标 下标从0开始 ...

  8. JavaScript中的数组与伪数组的区别

    在JavaScript中,除了5种原始数据类型之外,其他所有的都是对象,包括函数(Function). 基本数据类型:String,boolean,Number,Undefined, Null 引用数 ...

  9. Java中String、StringBuffer和StringBuilder的区别

    转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/6581009.html  在编程中,对于字符串拼接,我们可以用String类重载的+或concat(str).S ...

最新文章

  1. 计算机科技协会竞选书,加入计算机协会申请书
  2. java属性_Java Properties 类
  3. 【MATLAB】matlab 文档使用 ( 文档查询 | 文档层次 | 自带搜索工具 | 帮助命令 | 学习导引 )
  4. 《机器人编程实战》一一第2章 机器人词汇
  5. cmap参数 plt_plt.imshow的参数有哪些?
  6. 跨越语言障碍!哈工大联合MSRA提出多任务、多模态、多语言的统一预训练模型M3P (CVPR 2021)...
  7. 大数据BI可视化软件在企业的应用
  8. 设计模式系列2-设计模式分类及23种设计模式中英文名称对照
  9. 杭电acm2012 素数判定
  10. 项目报告制作-中型无盘网吧
  11. 页面中的icon小图标,下载+设置
  12. ExtJS 更改penal标题栏样式
  13. 从零开始写高性能的人脸识别服务器(一)
  14. 《C游记》 第二章 - 初识分支句 循环助本心(壹)
  15. C++标准库之IO库
  16. C. Unusual Competitions
  17. Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Could not
  18. 苍穹 WebOffice小科普,轻松助力在线Office办公
  19. JAVA:实现Luhn卢恩算法(附完整源码)
  20. CISP、CISSP、CISA、CISP-PTE有什么别?

热门文章

  1. pthread-win32在VC2005下的使用
  2. CTL_CODE说明
  3. 我的世界java刷怪数量_Minecraft我的世界Java版18w16a更新发布
  4. 联想计算机如何设置用户名和密码,联想电脑怎样设密码?联想电脑设置密码方法步骤【图文】...
  5. java 判断对象为控制_Java流程控制
  6. 【转】Qtcreator中常用快捷键和小技巧
  7. 【转】VTK + QT + VS 编译安装配置
  8. 【转】VS TFS源码分析软件PATFS使用方法一:配置团队项目
  9. TFS多地办公时的处理
  10. BI中事实表,维度表和数据集市,数据仓库的理解