JavaScript中几个相似方法对比

简介: 返回字符串两个索引之间(或到字符串末尾)的子串。

一、substring与substr

 

substring

substr

概述

返回字符串两个索引之间(或到字符串末尾)的子串 返回字符串从指定位置开始到指定长度的子串

语法

95.png

96.png

参数

indexStart:一个 0 到字符串长度之间的整数

indexEnd:可选,一个 0 到字符串长度之间的整数

start:开始提取字符的位置,可为负值

length:可选。提取的字符数

描述

1. indexStart = indexEnd,返回一个空字符串

2. indexStart > indexEnd,则效果是两个参数调换了一样

3. 省略 indexEnd,提取字符一直到字符串末尾

4. 任一参数 < 0 或为 NaN,则被当作 0

5. 任一参数 > strLength(字符串长度),则被当作strLength

1. start < 0,则被看作 strLength + start(从字符串倒数算起

2. start < 0 && abs(start) >strLength,则start = 0

3. start >= strLength,返回一个空字符串

4. 任意参数为 NaN,则被当作 0

5. length <= 0,返回一个空字符串

代码

在线执行

 


1)substring描述

返回字符串两个索引之间(或到字符串末尾)的子串。


var anyString = "Mozilla";//字符串长度为7
// 输出 "Moz"
console.log(anyString.substring(0,3));
console.log(anyString.substring(3,0));//indexStart > indexEnd,则像两个参数对换
console.log(anyString.substring(3,-3));//indexEnd < 0,则indexEnd = 0
console.log(anyString.substring(3,NaN));//indexEnd = NaN,则indexEnd = 0
console.log(anyString.substring(-2,3));//indexStart < 0,则indexStart = 0
console.log(anyString.substring(NaN,3));//indexStart = NaN,则indexStart = 0
// 输出 "lla"
console.log(anyString.substring(4,7));
console.log(anyString.substring(7,4));//indexStart > indexEnd,则像两个参数对换,同上
// 输出 ""
console.log(anyString.substring(4,4));//indexStart = indexEnd
// 输出 "Mozilla"
console.log(anyString.substring(0,7));
console.log(anyString.substring(0,10));//indexEnd > anyString.length,indexEnd=anyString.length。
console.log(anyString.substring(0));//省略 indexEnd,提取字符一直到字符串末尾

2)substr描述

返回字符串从指定位置开始到指定长度的子串。

var str = "abcdefghij";//长度为10
// 输出bc
console.log(str.substr(1,2));
// 输出hi,start=7
console.log(str.substr(-3,2));//start < 0,则被看作 strLength + start,其中 strLength 为字符串的长度
// 输出hij
console.log(str.substr(-3));//start < 0,省略length
// 输出bcdefghij
console.log(str.substr(1));
// 输出ab start=0
console.log(str.substr(-20,2)); //abs(start) > 字符串的长度,start=0
// 输出""
console.log(str.substr(20,2));  //start >= 字符串的长度,输出空字符串
// 输出""
console.log(str.substr(1,0));
console.log(str.substr(1,-5));//length <= 0,返回一个空字符串
console.log(str.substr(1,NaN));//end非数字, end=0
// 输出a
console.log(str.substr(NaN, 1));//start非数字, start=0


二、slice与splice

 

slice

splice

概述

将数组的一部分的浅拷贝, 返回到从开始到结束(结束不包括)选择的新数组对象

原始数组不改变

通过删除现有元素和/或添加新元素来更改数组的内容

原始数组会改变

语法

97.png

98.png

参数

begin:可选,开始提取的索引(从0开始),可为负值

end:可选,结束提取的索引(包含begin,不包含end),可为负值

start:开始修改的索引(从0开始),可为负值

deleteCount:可选,要移除的数组元素的个数

item1,item2...:可选,要添加进数组的元素,从start位置开始

返回

一个含有提取元素的新数组

由被删除的元素组成的一个数组

如果没有删除元素,则返回空数组。

描述

1. 原始数组没有修改,浅复制了原数组的元素

2. 任何参数为负数,改变计算方式,从数组倒数算起

3. 任何参数为NaN,则被当作 0

4. start 省略,start=0

5. start > end,输出空数组

1. 原始数组被修改,在指定位置可添加任意多个元素

2. start <0 为负数,改变计算方式,从数组倒数算起

3. start 或 deleteCount NaN则被当作 0

4. start 省略,输出空数组



1) slice描述

将数组的一部分的浅拷贝, 返回到从开始到结束(结束不包括)选择的新数组对象,原始数组不改变。


var fruits = ['Banana', 'Orange', 'Lemon', 'Apple', 'Mango'];
var citrus = fruits.slice(1, 3);//包含1 不包含3
// 输出 ['Banana', 'Orange', 'Lemon', 'Apple', 'Mango']
console.log(fruits);//原始数组没有修改
// 输出 ['Orange', 'Lemon']
console.log(citrus);//浅复制了原数组的元素
// 输出 ['Banana', 'Orange', 'Lemon', 'Apple', 'Mango']
console.log(fruits.slice());// start 省略,start=0
// 输出 ['Apple', 'Mango']
console.log(fruits.slice(-2));// start < 0,从数组倒数算起
// 输出 ['Apple']
console.log(fruits.slice(-2, -1));// start < 0 && end < 0,从数组倒数算起,倒数第二个元素到倒数第一个元素
// 输出 ['Orange', 'Lemon', 'Apple']
console.log(fruits.slice(1, -1));
// 输出 []
console.log(fruits.slice(2, 1));// start > end,输出空数组
// 输出 ['Banana']
console.log(fruits.slice(NaN, 1));// start非数字,start=0
// 输出 []
console.log(fruits.slice(1, NaN));// end非数字,end=0

2) splice描述

通过删除现有元素和/或添加新元素来更改数组的内容,原始数组会改变。

var myFish = ["angel", "clown", "mandarin", "sturgeon"];
// 输出 []
console.log(myFish.splice(2, 0, "drum"));// 空,没有删除元素
console.log(myFish);//原数组被改变 myFish=["angel", "clown", "drum", "mandarin", "sturgeon"]
// 输出 ["drum"]
console.log(myFish.splice(2, 1));// 有删除元素 myFish=["angel", "clown", "mandarin", "sturgeon"]
myFish.splice(2, 1, "splice", "parrot");
console.log(myFish);//添加两个元素 myFish=["angel", "clown", "splice", "parrot", "sturgeon"]
// 输出 ["parrot", "sturgeon"]
console.log(myFish.splice(-2));// start < 0,从数组倒数算起 myFish=["angel", "clown", "splice"]
// 输出 []
console.log(myFish.splice(-2, -1));// start < 0 && deleteCount < 0,空数组
console.log(myFish.splice(1, -1));//空数组
console.log(myFish.splice(1, NaN));// deleteCount非数字,deleteCount=0
console.log(myFish.splice());// start省略
// 输出 ["angel"]
console.log(myFish.splice(NaN, 1));// start非数字,start=0  myFish=["clown", "splice"]
// 输出 ["clown", "splice"]
console.log(myFish.splice(0, 10));// deleteCount > 数组长度


相关文章
|
20天前
|
JavaScript 前端开发 程序员
前端原生Js批量修改页面元素属性的2个方法
原生 Js 的 getElementsByClassName 和 querySelectorAll 都能获取批量的页面元素,但是它们之间有些细微的差别,稍不注意,就很容易弄错!
|
1月前
|
Web App开发 JavaScript 前端开发
如何确保 Math 对象的方法在不同的 JavaScript 环境中具有一致的精度?
【10月更文挑战第29天】通过遵循标准和最佳实践、采用固定精度计算、进行全面的测试与验证、避免隐式类型转换以及持续关注和更新等方法,可以在很大程度上确保Math对象的方法在不同的JavaScript环境中具有一致的精度,从而提高代码的可靠性和可移植性。
|
18天前
|
监控 JavaScript Java
Node.js中内存泄漏的检测方法
检测内存泄漏需要综合运用多种方法,并结合实际的应用场景和代码特点进行分析。及时发现和解决内存泄漏问题,可以提高应用的稳定性和性能,避免潜在的风险和故障。同时,不断学习和掌握内存管理的知识,也是有效预防内存泄漏的重要途径。
114 52
|
1月前
|
JavaScript 前端开发 索引
js中DOM的基础方法
【10月更文挑战第31天】这些DOM基础方法是操作网页文档结构和实现交互效果的重要工具,通过它们可以动态地改变页面的内容、样式和行为,为用户提供丰富的交互体验。
|
1月前
|
缓存 JavaScript UED
js中BOM中的方法
【10月更文挑战第31天】
|
20天前
|
缓存 JavaScript 前端开发
JavaScript 与 DOM 交互的基础及进阶技巧,涵盖 DOM 获取、修改、创建、删除元素的方法,事件处理,性能优化及与其他前端技术的结合,助你构建动态交互的网页应用
本文深入讲解了 JavaScript 与 DOM 交互的基础及进阶技巧,涵盖 DOM 获取、修改、创建、删除元素的方法,事件处理,性能优化及与其他前端技术的结合,助你构建动态交互的网页应用。
29 5
|
21天前
|
JavaScript 前端开发
js中的bind,call,apply方法的区别以及用法
JavaScript中,`bind`、`call`和`apply`均可改变函数的`this`指向并传递参数。其中,`bind`返回一个新函数,不立即执行;`call`和`apply`则立即执行,且`apply`的参数以数组形式传递。三者在改变`this`指向及传参上功能相似,但在执行时机和参数传递方式上有所区别。
24 1
|
1月前
|
JavaScript 前端开发
.js方法参数argument
【10月更文挑战第26天】`arguments` 对象为JavaScript函数提供了一种灵活处理参数的方式,能够满足各种不同的参数传递和处理需求,在实际开发中具有广泛的应用价值。
38 7
|
1月前
|
JavaScript 前端开发 图形学
JavaScript 中 Math 对象常用方法
【10月更文挑战第29天】JavaScript中的Math对象提供了丰富多样的数学方法,涵盖了基本数学运算、幂运算、开方、随机数生成、极值获取以及三角函数等多个方面,为各种数学相关的计算和处理提供了强大的支持,是JavaScript编程中不可或缺的一部分。
|
1月前
|
JavaScript 前端开发 开发者