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. printf("%f\n",5);

    http://zhidao.baidu.com/link?url=87OGcxtDa6fQoeKmk1KylLu4eIBLJSh7CA3n5NWY-Ipm9TxZViFnIui307duCXWhaM0 ...

  2. 使用caffe训练自己的图像数据(未完)

    参考博客:blog.csdn.net/drrlalala/article/details/47274549 1,首先在网上下载图片,猫和狗.直接保存下载该网页,会生成一个有图片的文件夹.caffe-m ...

  3. 【Python】【内置函数】【bytes&bytearray&str&array】

    [bytes] 英文文档: class bytes([source[, encoding[, errors]]]) Return a new “bytes” object, which is an i ...

  4. BM25 调参调研

    1. 搜索 ES 计算文本相似度用的 BM25,参数默认,不适合电商场景,可调整 BM25 参数使其适用于电商短文本场景 2. k1.b.tf.L.tfScore 的关系如下图红框内所示(注:这里的 ...

  5. python计算结果显示小数

    先将整型转换成float型,在计算,结果就有小数了 >>> a = >>> b = >>> c = a/b >>> a,b,c ...

  6. API接口自动化之3 同一个war包中多个接口做自动化测试

    同一个war包中多个接口做自动化测试 一个接口用一个测试类,每个测试用例如下,比如下面是4个测试用例,每个详细的测试用例中含有请求入参,返回体校验,以此来判断每条测试用例是否通过 一个war包中,若含 ...

  7. vmware 安装ubuntu

    点击自定义硬件 即将完毕 下面就是安装啦

  8. 深入理解Java中配置环境变量

    深入理解Java中配置环境变量 配置的目的: 本来只在安装JDK的bin目下能运行java.exe,javac.exe,jar.exe,javadoc.exe等Java开发工具包命令,我们现在想让在所 ...

  9. 对微服务API服务网关的理解

    目录微服务专栏地址目录1. 简介2. 什么是API网关3. 为什么需要API网关4. API网关在微服务架构体系中处于什么位置4.1 调用者眼中的API网关4.2 所处的位置5. 网关技术实现有哪些6 ...

  10. checklistbox的用法

    一般认为:foreach (object obj in checkedListBox1.SelectedItems)即可遍历选中的值.其实这里遍历的只是高亮的值并不是打勾的值.遍历打勾的值要用下面的代 ...