JS中的substr()和substring()函数有什么区别

简介: JS中的substr()和substring()函数有什么区别

在 JavaScript 中,substr()substring() 函数都是用于提取字符串的子串,但它们有一些区别:

  1. substr(start, length)substr() 函数从指定索引位置开始提取指定长度的字符。它接受两个参数:起始索引 start 和要提取的字符数 length。如果省略 length 参数,则会提取从起始索引到字符串末尾的所有字符。start 参数可以是负数,表示从字符串末尾开始计数。例如:

    const str = 'Hello, world!';
    const sub1 = str.substr(7, 5);     // "world"
    const sub2 = str.substr(-6);       // "world!"
    

    在上面的示例中,sub1 提取了从索引 7 开始的 5 个字符,而 sub2 提取了从倒数第 6 个字符开始到字符串末尾的所有字符。

  2. substring(start, end)substring() 函数从指定的两个索引位置之间提取子串,包括起始索引位置但不包括结束索引位置。它接受两个参数:起始索引 start 和结束索引 end。如果省略 end 参数,则会提取从起始索引到字符串末尾的所有字符。startend 参数都可以是负数,表示从字符串末尾开始计数。如果 start 大于 end,则 substring() 会交换这两个参数的值。例如:

    const str = 'Hello, world!';
    const sub1 = str.substring(7, 12);  // "world"
    const sub2 = str.substring(7);     // "world!"
    const sub3 = str.substring(-6);    // "Hello, world!"
    const sub4 = str.substring(12, 7);  // "world"(参数交换)
    

    在上面的示例中,sub1 提取了从索引 7 到索引 11 的字符,sub2 提取了从索引 7 开始的所有字符,sub3 提取了整个字符串(负数索引被视为 0),而 sub4 也提取了从索引 7 到索引 11 的字符,即使参数的顺序是颠倒的。

需要注意的是,substr()substring() 在处理负数索引和参数交换方面的行为略有不同。因此,在使用这些函数时应注意其差异,并根据具体需求选择适当的函数。

相关文章
|
1月前
|
JavaScript
JS实现多条件搜索函数
JS封装的多条件搜索
|
3月前
|
JavaScript 前端开发
JavaWeb JavaScript ③ JS的流程控制和函数
通过本文的详细介绍,您可以深入理解JavaScript的流程控制和函数的使用,进而编写出高效、可维护的代码。
95 32
|
4月前
|
JavaScript 前端开发 容器
this、self、window、top 在 JavaScript 中的区别深入研究
在 JavaScript 开发中,`this`、`self`、`window` 和 `top` 是四个常用的概念。`this` 指向当前执行上下文的对象,其值取决于函数调用方式;`self` 在全局作用域中等同于 `window`,常用于 Web Workers;`window` 代表浏览器窗口,是全局变量的容器;`top` 指向最顶层窗口,用于判断是否在框架中。理解这些概念有助于编写健壮的代码。
102 1
this、self、window、top 在 JavaScript 中的区别深入研究
|
2月前
|
移动开发 运维 供应链
通过array.some()实现权限检查、表单验证、库存管理、内容审查和数据处理;js数组元素检查的方法,some()的使用详解,array.some与array.every的区别(附实际应用代码)
array.some()可以用来权限检查、表单验证、库存管理、内容审查和数据处理等数据校验工作,核心在于利用其短路机制,速度更快,节约性能。 博客不应该只有代码和解决方案,重点应该在于给出解决方案的同时分享思维模式,只有思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~
|
2月前
|
供应链 JavaScript 前端开发
通过array.every()实现数据验证、权限检查和一致性检查;js数组元素检查的方法,every()的使用详解,array.some与array.every的区别(附实际应用代码)
array.every()可以用来数据验证、权限检查、一致性检查等数据校验工作,核心在于利用其短路机制,速度更快,节约性能。 博客不应该只有代码和解决方案,重点应该在于给出解决方案的同时分享思维模式,只有思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~
|
2月前
|
JavaScript 前端开发 Java
详解js柯里化原理及用法,探究柯里化在Redux Selector 的场景模拟、构建复杂的数据流管道、优化深度嵌套函数中的精妙应用
柯里化是一种强大的函数式编程技术,它通过将函数分解为单参数形式,实现了灵活性与可复用性的统一。无论是参数复用、延迟执行,还是函数组合,柯里化都为现代编程提供了极大的便利。 从 Redux 的选择器优化到复杂的数据流处理,再到深度嵌套的函数优化,柯里化在实际开发中展现出了非凡的价值。如果你希望编写更简洁、更优雅的代码,柯里化无疑是一个值得深入学习和实践的工具。从简单的实现到复杂的应用,希望这篇博客能为你揭开柯里化的奥秘,助力你的开发之旅! 只有锻炼思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一
|
6月前
|
JavaScript 前端开发 Java
[JS]同事:这次就算了,下班回去赶紧补补内置函数,再犯肯定被主管骂
本文介绍了JavaScript中常用的函数和方法,包括通用函数、Global对象函数以及数组相关函数。详细列出了每个函数的参数、返回值及使用说明,并提供了示例代码。文章强调了函数的学习应结合源码和实践,适合JavaScript初学者和进阶开发者参考。
78 2
[JS]同事:这次就算了,下班回去赶紧补补内置函数,再犯肯定被主管骂
|
6月前
|
JavaScript 前端开发
js中的bind,call,apply方法的区别以及用法
JavaScript中,`bind`、`call`和`apply`均可改变函数的`this`指向并传递参数。其中,`bind`返回一个新函数,不立即执行;`call`和`apply`则立即执行,且`apply`的参数以数组形式传递。三者在改变`this`指向及传参上功能相似,但在执行时机和参数传递方式上有所区别。
85 1
|
6月前
|
设计模式 JavaScript 前端开发
js中new和object.creat区别
【10月更文挑战第29天】`new` 关键字和 `Object.create()` 方法在创建对象的方式、原型链继承、属性初始化以及适用场景等方面都存在差异。在实际开发中,需要根据具体的需求和设计模式来选择合适的方法来创建对象。
|
6月前
|
前端开发 JavaScript 开发者
除了 Generator 函数,还有哪些 JavaScript 异步编程解决方案?
【10月更文挑战第30天】开发者可以根据具体的项目情况选择合适的方式来处理异步操作,以实现高效、可读和易于维护的代码。