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. ...
随机推荐
- 【概念、概述】Spark入门教程[1]
本教程源于2016年3月出版书籍<Spark原理.机制及应用> ,如有兴趣,请支持正版书籍. 随着互联网为代表的信息技术深度发展,其背后由于历史积累产生了TB.PB甚至EB级数据量,由于传 ...
- Wireshark无法解析OpenFlow配置协议 解决方法
在使用wireshark对OpenFlow交换机与FlowVisor的通信过程进行抓包分析的时候,在其选项中有openflow_v1选项,但Wireshark竟无法解析OpenFlow协议. 在查阅相 ...
- C语言中生产随机数 rand()函数
参考资料:C语言中产生随机数 一:如果你只要产生随机数而不需要设定范围的话,你只要用rand()就可以了:rand()会返回一随机数值, 范围在0至RAND_MAX 间.RAND_MAX定义在stdl ...
- [异常记录-12]Web Deploy部署:未能连接到远程计算机,请确保在远程计算机上安装了 Web Deploy 并启动了所需的进程("Web Management Service")
Web Deploy 安装 请参考:图文详解远程部署ASP.NET MVC 5项目 如此安装后还不行, 可以在卸载后重新安装 Web Deploy 时,不要选那个经典还是典型的安装选项,选自定义安装 ...
- 简单介绍tomcat中maxThreads,acceptCount,connectionTimeout
<?xml version='1.0' encoding='utf-8'?> <Server port="8005" shutdown="SHUTDOW ...
- python json格式转xml格式
import xmltodict #json转xml函数 def jsontoxml(jsonstr): #xmltodict库的unparse()json转xml xmlstr = xmltodic ...
- Fragment 的生命周期及使用方法详解
Fragment 的基础知识介绍 1.1 概述 1.1.1 特性 By hebang32624 Fragment 是 activity 的界面中的一部分或一种行为.可以把多个 Fragment 组合到 ...
- NGUI实现简单的倒计时组件
using System; using UnityEngine; public enum ETimerType { CommonFormat, // 78 77 76 75 ... TimeForma ...
- 用Rails.5.2+ Vue.js做 vue-todolist app
Rails5.2+Vue.js完成Lists(curd) 注意: Edit/update使用SPA(single-page Application单页面程序)的方法完成.点击文字出现一个输入框和按钮. ...
- 4-6 select_tag和select的区别和理解。javascript_tag
via: :all是什么意思?主要用于约束http动作. <%= select_tag "set_locale", options_for_select(LANGUAGES, ...