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的更多相关文章

  1. Array.prototype.forEach()&&Array.prototype.map()

    https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach https ...

  2. 观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 ...

  3. 【笔记】js Array.prototype.slice.call(arguments) 将函数的参数转换为数组方法的见解

    我们知道函数里面的参数实际上是一个以数组形式储存的对象 但它并非一个数组 如果我们要将它转换为数组可以调用Array.prototype.slice() 这个方法 分析一下这个方法: Array.pr ...

  4. Array.prototype

    Array.prototype  属性表示 Array 构造函数的原型,并允许您向所有Array对象添加新的属性和方法. /* 如果JavaScript本身不提供 first() 方法, 添加一个返回 ...

  5. javascript 一些函数的实现 Function.prototype.bind, Array.prototype.map

    * Function.prototype.bind Function.prototype.bind = function() { var self = this, context = [].shift ...

  6. javascript for in 循环时,会取到Array.prototype

    /** *删除数组指定下标或指定对象 */ if(!Array.prototype.remove){ Array.prototype.remove = function(obj){ for(var i ...

  7. Array.prototype.map()详解

    今天在地铁上看到这样一个小例子: ["1","2","3"].map(parseInt); 相信很多人和我一样,觉得输出的结果是[1,2,3 ...

  8. JavaScript的Array.prototype.filter()详解

    摘抄与:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Array/filter 概述 ...

  9. Array.prototype.reduce()

    reduce() 方法接收一个函数作为累加器(accumulator),数组中的每个值(从左到右)开始缩减,最终为一个值. arr.reduce([callback, initialValue]) c ...

  10. 理解Array.prototype.fill和Array.from

    之所以将这两个方法放在一起说,是因为经常写这样的代码: Array.from({length: 5}).fill(0),看起来很简洁,但是踩到坑之后才发现自己对这两个方法实在是不求甚解. Array. ...

随机推荐

  1. 【概念、概述】Spark入门教程[1]

    本教程源于2016年3月出版书籍<Spark原理.机制及应用> ,如有兴趣,请支持正版书籍. 随着互联网为代表的信息技术深度发展,其背后由于历史积累产生了TB.PB甚至EB级数据量,由于传 ...

  2. Wireshark无法解析OpenFlow配置协议 解决方法

    在使用wireshark对OpenFlow交换机与FlowVisor的通信过程进行抓包分析的时候,在其选项中有openflow_v1选项,但Wireshark竟无法解析OpenFlow协议. 在查阅相 ...

  3. C语言中生产随机数 rand()函数

    参考资料:C语言中产生随机数 一:如果你只要产生随机数而不需要设定范围的话,你只要用rand()就可以了:rand()会返回一随机数值, 范围在0至RAND_MAX 间.RAND_MAX定义在stdl ...

  4. [异常记录-12]Web Deploy部署:未能连接到远程计算机,请确保在远程计算机上安装了 Web Deploy 并启动了所需的进程("Web Management Service")

    Web Deploy 安装 请参考:图文详解远程部署ASP.NET MVC 5项目 如此安装后还不行,  可以在卸载后重新安装 Web Deploy 时,不要选那个经典还是典型的安装选项,选自定义安装 ...

  5. 简单介绍tomcat中maxThreads,acceptCount,connectionTimeout

    <?xml version='1.0' encoding='utf-8'?> <Server port="8005" shutdown="SHUTDOW ...

  6. python json格式转xml格式

    import xmltodict #json转xml函数 def jsontoxml(jsonstr): #xmltodict库的unparse()json转xml xmlstr = xmltodic ...

  7. Fragment 的生命周期及使用方法详解

    Fragment 的基础知识介绍 1.1 概述 1.1.1 特性 By hebang32624 Fragment 是 activity 的界面中的一部分或一种行为.可以把多个 Fragment 组合到 ...

  8. NGUI实现简单的倒计时组件

    using System; using UnityEngine; public enum ETimerType { CommonFormat, // 78 77 76 75 ... TimeForma ...

  9. 用Rails.5.2+ Vue.js做 vue-todolist app

    Rails5.2+Vue.js完成Lists(curd) 注意: Edit/update使用SPA(single-page Application单页面程序)的方法完成.点击文字出现一个输入框和按钮. ...

  10. 4-6 select_tag和select的区别和理解。javascript_tag

    via: :all是什么意思?主要用于约束http动作. <%= select_tag "set_locale", options_for_select(LANGUAGES, ...