slice,Array.prototype.slice,Array.protyotype.slice.call
slice
特点:基于当前数组中的一或多个项创建一个新数组。【原数组不会被修改】
返回结果:返回一个从开始到结束(不包括结束)选择的数组的一部分浅拷贝到一个新数组对象。
语法:
arr.slice();
arr.slice(start);
arr.slice(start,end);
参数解释:
start:
1、从该索引开始获取原数组的元素-------从0开始
2、为负数:表示从原数组中倒数第几个元素开始。例子:slice(-2)----->表示提取原数组中的倒数第二个元素到最后一个元素
3、如果省略start,默认从0开始
end:
1、slice会提取原数组中从begin到end的所有元素【包含begin,不包含end】。
例子:slice(2,4);------>提取索引为2、3的元素
2、为负数:表示从原数组中的倒数第几个元素结束抽取
例子:slice(-2,-1);------->抽取原数组中倒数第二个元素【不包括最后一个元素,即:倒数第一个元素】。
3、如果省略end/end大于数组长度,slice会一直提取到原数组末尾。
******也可以这样说:如果参数里面有负数,可以将这个负数与数组长度值相加,从而得到相应的位置。
例子:
var arr=[1,2,3,4,5,6];
arr.slice(-2,-1)等价于arr.slice(4,5)
补充!!!!
slice不修改原数组,只会返回一个浅复制了原数组中的元素的一个新数组。原数组会按照以下规则拷贝:
1、如果该元素是个对象引用(不是实际的对象),slice会拷贝这个对象引用到新的数组里。【两个对象引用都引用了同一个对象-------如果被引用的对象发生改变,则新旧数组中的对应元素也会发生变化。】
2、对于字符串、数字以及布尔值来说(不是String,Number,Boolean对象),slice会拷贝这些新值到新的数组里,在别的数组里修改这些字符串/数字/布尔值,都不会影响另外一个数组
3、如果随意向两个数组添加新元素,不会影响另外一个数组。
slice还可以将一个类数组(Array-like)对象-----【例:arguments】或者集合转换成一个数组。
//使用 Array.prototype.slice.call(arguments)
function list() {
return Array.prototype.slice.call(arguments); //或者使用 [].slice.call(arguments)
} var list1 = list(1, 2, 3); // [1, 2, 3]//使用bind简化该过程
var unboundSlice = Array.prototype.slice;
var slice = Function.prototype.call.bind(unboundSlice); function list() {
return slice(arguments);
} var list1 = list(1, 2, 3); // [1, 2, 3]
博客内容源于:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Array/slice
slice,Array.prototype.slice,Array.protyotype.slice.call的更多相关文章
- Array.prototype.forEach()&&Array.prototype.map()
https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach https ...
- 观V8源码中的array.js,解析 Array.prototype.slice为什么能将类数组对象转为真正的数组?
在官方的解释中,如[mdn] The slice() method returns a shallow copy of a portion of an array into a new array o ...
- 【笔记】js Array.prototype.slice.call(arguments) 将函数的参数转换为数组方法的见解
我们知道函数里面的参数实际上是一个以数组形式储存的对象 但它并非一个数组 如果我们要将它转换为数组可以调用Array.prototype.slice() 这个方法 分析一下这个方法: Array.pr ...
- Array.prototype
Array.prototype 属性表示 Array 构造函数的原型,并允许您向所有Array对象添加新的属性和方法. /* 如果JavaScript本身不提供 first() 方法, 添加一个返回 ...
- javascript 一些函数的实现 Function.prototype.bind, Array.prototype.map
* Function.prototype.bind Function.prototype.bind = function() { var self = this, context = [].shift ...
- javascript for in 循环时,会取到Array.prototype
/** *删除数组指定下标或指定对象 */ if(!Array.prototype.remove){ Array.prototype.remove = function(obj){ for(var i ...
- Array.prototype.map()详解
今天在地铁上看到这样一个小例子: ["1","2","3"].map(parseInt); 相信很多人和我一样,觉得输出的结果是[1,2,3 ...
- JavaScript的Array.prototype.filter()详解
摘抄与:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Array/filter 概述 ...
- Array.prototype.reduce()
reduce() 方法接收一个函数作为累加器(accumulator),数组中的每个值(从左到右)开始缩减,最终为一个值. arr.reduce([callback, initialValue]) c ...
- 理解Array.prototype.fill和Array.from
之所以将这两个方法放在一起说,是因为经常写这样的代码: Array.from({length: 5}).fill(0),看起来很简洁,但是踩到坑之后才发现自己对这两个方法实在是不求甚解. Array. ...
随机推荐
- HDU 1823 Luck and Love (二维线段树&区间最值)题解
思路: 树套树,先维护x树,再维护y树,多练练应该就能懂了 代码: #include<cstdio> #include<cmath> #include<cstring&g ...
- JVM类加载机制总结
1.运行时加载优点 提高灵活性,可以在运行时动态加载,连接.例子:面向接口编程,动态绑定实现类(但C++也有动态绑定,说明动态绑定不一定通过运行时加载Class字节码实现,也可能是机器码支持的) 2. ...
- Codeforces Round #530 (Div. 1)
A - Sum in the tree 就是贪心选尽量让上面的点权尽量大,那么对于偶数层的点,其到根节点的和即为所有儿子中的最大值. #include<bits/stdc++.h> usi ...
- com.mysql.jdbc.PacketTooBigException,及mysql 设置 max_allow_packet
本文为博主原创,未经允许不得转载: 在进行批量导入表格数据入库操作时,报了以下错误: 错误分析: mysql根据配置文件会限制server接受的数据包大小.有时候大的插入和更新会受max_allowe ...
- 线程面试top50题
转载:java线程面试题: 不管你是新程序员还是老手,你一定在面试中遇到过有关线程的问题.Java语言一个重要的特点就是内置了对并发的支持,让Java大受企业和程序员的欢迎.大多数待遇丰厚的Java开 ...
- UVa 11134 传说中的车
https://vjudge.net/problem/UVA-11134 题意:在n*n的棋盘上放n个车,使得任意两个车不相互攻击,且第i个车在一个给定的矩形Ri之内.用4个整数xli,yli,xri ...
- (转)Linux I/O 调度方法
Linux I/O 调度方法 转自https://blog.csdn.net/theorytree/article/details/6259104 操作系统的调度有 CPU调度 CPU sche ...
- Android 实现文件上传功能(upload)
文 件上传在B/S应用中是一种十分常见的功能,那么在Android平台下是否可以实现像B/S那样的文件上传功能呢?答案是肯定的.下面是一个模拟网站程 序上传文件的例子.这里只写出了Android部分的 ...
- 安装gcc4.8.5
安装gcc4.8.51. g++ --version, 4.4.7不支持c++112. 升级gcc-c++, 下载gcc https://gcc.gnu.org/ 官网,镜像下载地址https: ...
- Codeforces 888E - Maximum Subsequence(折半枚举(meet-in-the-middle))
888E - Maximum Subsequence 思路:折半枚举. 代码: #include<bits/stdc++.h> using namespace std; #define l ...