zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    fs.readdirSync
    symbol
    vuex-count
    webpack2.0
    关于vuex报错
    store
    .NET MVC 验证码
    SQLServer 加密
    IE10、IE11下SCRIPT5009: “__doPostBack”未定义
    Sql Server 增加字段、修改字段、修改类型、修改默认值
  • 原文地址:https://www.cnblogs.com/Jm-jing/p/6903306.html
Copyright © 2011-2022 走看看