深入Array.prototype.slice()方法
"slice"英文是 片 的意思,顾名思义,slice方法是将数组切片,即返回原数组的一部分
slice()
方法返回一个新的数组对象,这一对象是一个由 begin 和 end 决定的原数组的浅拷贝(包括 begin,不包括end)。原始数组不会被改变。
var arr = [4,2,7,0,1,6]arr.slice(1,3) //[2,7]arr.slice() //[4,2,7,0,1,6]arr.slice(1) //[2,7,0,1,6]arr.slice(1,10) //[2,7,0,1,6]arr.slice(-2) //[1,6]arr.slice(-3,-1) //[0,1]
语法:
arr.slice([begin[, end]])
begin 可选
提取起始处的索引(从 0 开始),从该索引开始提取原数组元素。如果该参数为负数,则表示从原数组中的倒数第几个元素开始提 取,slice(-2) 表示提取原数组中的倒数第二个元素到最后一个元素(包含最后一个元素)。如果省略 begin,则 slice 从索引 0 开始。如果 begin 大于原数组的长度,则会返回空数组。
end 可选
提取终止处的索引(从 0 开始),在该索引处结束提取原数组元素。slice 会提取原数组中索引从 begin 到 end 的所有元素(包含 begin,但不包含 end)。slice(1,4) 会提取原数组中从第二个元素开始一直到第四个元素的所有元素 (索引为 1, 2, 3的元素)。如果该参数为负数, 则它表示在原数组中的倒数第几个元素结束抽取。 slice(-2,-1) 表示抽取了原数组中的倒数第二个元素到最后一个元素(不包含最后一个元素,也就是只有倒数第二个元素)。如果 end 被省略,则 slice 会一直提取到原数组末尾。如果 end 大于数组的长度,slice 也会一直提取到原数组末尾。
返回值
一个含有被提取元素的新数组。
注意:
slice()
方法不会改变原数组,
slice()
方法是浅拷贝,如果原数组中包含引用类型,那么slice
会拷贝这个对象引用到新的数组里。两个对象引用都引用了同一个对象。如果被引用的对象发生改变,则新的和原来的数组中的这个元素也会发生改变
var list = [{ name: "shi", age: 20 },[1, 2, 3], 60]var arr = list.slice()list[0].name = "xia"console.log(arr) //[{ name: "xia", age: 20 },[1, 2, 3], 60]
Array.prototype.slice()
常用之处是用于将实参列表( arguments
)转为数组
由于arguments
是类数组,不是真正的数组,不能调用数组的方法,所以需要使用Array.prototype.slice.call(arguments)
将其转换为数组
function demo(){var arr = Array.prototype.slice.call(arguments)console.log(arr) //[1,2,3,4]}demo(1,2,3,4)
深入Array.prototype.slice()方法相关推荐
- Array.prototype.slice.call()方法详解
在很多时候经常看到Array.prototype.slice.call()方法,比如Array.prototype.slice.call(arguments),下面讲一下其原理: 1.基本讲解 1.在 ...
- [转载]Array.prototype.slice.call(arguments,1)原理
Array.prototype.slice.call(arguments,1)该语句涉及两个知识点. arguments是一个关键字,代表当前参数,在javascript中虽然arguments表面上 ...
- js Array.prototype.slice.call(arguments,0) 理解
Array.prototype.slice.call(arguments,0) 经常会看到这段代码用来处理函数的参数 网上很多复制粘帖说:Array.prototype.slice.call(argu ...
- Array.prototype.slice.call
Array.prototype.slice.call(arguments,0)就类似于arguments.slice(0),但因为arguments不是真正的Array,所以它没有slice这个方法. ...
- Array.prototype.slice.call 将伪数组转成真数组的原理是什么?
好久没上SF,昨天上来看到一个问题,引起了我的兴趣.一番探索和研究后,有了此篇文章,也算是对该问题的解答. let pretendArr = {0:0,1:1,2:2,length:3}; [].sl ...
- Array.prototype.slice.apply(arguments)和[].slice.apply(arguments)解析
我们知道,函数内部 arguments 是一个类数组对象,不是真正的数组,因此也无法使用数组的各种方法.想详细了解 argument 对象可以前往函数中的 arguments. (function f ...
- 详解 Array.prototype.slice.call(arguments)
首先,slice有两个用法,一个是String.slice,一个是Array.slice,第一个返回的是字符串,第二个返回的是数组 在这里我们看第二个方法 1.在JS里Array是一个类 slice是 ...
- [转] 理解 JavaScript 中的 Array.prototype.slice.apply(arguments)
假如你是一个 JavaScript 开发者,你可能见到过 Array.prototype.slice.apply(arguments) 这样的用法,然后你会问,这么写是什么意思呢? 这个语法其实不难理 ...
- Array.prototype.slice.call()如何工作?
本文翻译自:how does Array.prototype.slice.call() work? 我知道它用于使参数成为一个真正的数组,但我不明白使用Array.prototype.slice.ca ...
最新文章
- 函数要多小才够好——谈小函数之道
- SDK location not found. Define location with an ANDROID_SDK_ROOT environment variable or by setting
- Hibernate4.x之映射关系--双向1-n
- 重庆邮电大学发布2021年最新小样本目标检测综述
- ByteBuffer使用之道
- arcgis坡度结果有误或z因子前有感叹号
- 在Centos7 更改Docker默认镜像和容器的位置
- Spring AOP之公共的切入点配置
- 吴恩达深度学习笔记 3.1~3.11 浅层神经网络
- 超级实用的内存泄漏归纳分析心得
- Hbase与传统关系型数据库对比
- 计算机接口74LS138,用74ls138设计全加器
- 最新支持备案域名后缀列表
- mysql数据库字符集实践详解_mysql数据库 详解 之 自学成才1
- iceberg Flink操作
- html5 ins标签,HTML ins标签常用的用法有哪些?HTML ins常用属性的介绍
- php 判断号码运营商,PHP根据手机号判断运营商(详细介绍附代码)
- 【周末闲谈】谈谈数学转码这一年来的体会与反思
- 搭建s9、s19、L3+维修平台
- 快速创建微信小程序,注册即认证,无需300元认证费