ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

彻底搞懂字符串提取方法 slice,substr,substring

2021-08-25 10:35:09  阅读:185  来源: 互联网

标签:slice console log substring substr 参数 搞懂


ECMAScript提供了3个从字符串中提取子字符串的方法:slice(),substr(),substring();为什么要出三个方法呢,下面就来分析这三个方法的共同点与区别。

对于两个参数都是正整数的情况下:

相同点:

  • 这三个方法都返回调用他们的字符串的一个子字符串,也就是不会改变原字符串
  • 都接收一到两个参数,第一个参数表示子字符串开始的位置,第二个参数表示子字符串结束的位置
  • 省略第二个参数都表示提取到末尾

不同点:

  • 对 slice()和 substring()而言,第二个参数是提取结 束的位置(即该位置之前的字符会被提取出来)。对 substr()而言,第二个参数表示返回的子字符串数量
let str = 'hello word';

console.log(str.slice(3)); // "lo word"
console.log(str.substr(3));  // "lo word"
console.log(str.substring(3));  // "lo word"

console.log(str.slice(3, 7));  // "lo w"
console.log(str.substring(3, 7));  // "lo w"
console.log(str.substr(3, 7));  // "lo worl"

在这个例子中,slice()、substr()和 substring()是以相同方式被调用的,而且多数情况下返 回的值也相同。如果只传一个参数 3,则所有方法都将返回"lo world",因为"hello"中"l"位置为 3。 如果传入两个参数 3 和 7,则 slice()和 substring()返回"lo w"(因为"world"中"o"在位置 7, 不包含),而 substr()返回"lo worl",因为第二个参数对它而言表示返回的字符数。

当某个参数是负值的情况下:

  • slice()方法将所有负值参数都当成字 符串长度加上负参数值。
  • substr()方法将第一个负参数值当成字符串长度加上该值,将第二个负参数值转换为 0
  • substring()方法会将所有负参数值都转换为 0
let stringValue = "hello world";

console.log(stringValue.slice(-3)); // "rld"
console.log(stringValue.substring(-3)); // "hello world"
console.log(stringValue.substr(-3)); // "rld"

console.log(stringValue.slice(3, -4)); // "lo w"
console.log(stringValue.substring(3, -4));  // "hel"
console.log(stringValue.substr(3, -4));     // "" (empty string)

这个例子明确演示了 3 个方法的差异。在给 slice()和 substr()传入负参数时,它们的返回结果 相同。这是因为-3 会被转换为 8(长度加上负参数),实际上调用的是 slice(8)和 substr(8)。而 substring()方法返回整个字符串,因为-3 会转换为 0。

在第二个参数是负值时,这 3 个方法各不相同。slice()方法将第二个参数转换为 7,实际上相当 于调用 slice(3, 7),因此返回"lo w"。而 substring()方法会将第二个参数转换为 0,相当于调用 substring(3, 0),等价于 substring(0, 3),这是因为这个方法会将较小的参数作为起点,将较 大的参数作为终点。对 substr()来说,第二个参数会被转换为 0,意味着返回的字符串包含零个字符, 因而会返回一个空字符串。

 

标签:slice,console,log,substring,substr,参数,搞懂
来源: https://www.cnblogs.com/shenjp/p/15183791.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有