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

转载于:https://www.cnblogs.com/Jm-jing/p/6903306.html

slice,Array.prototype.slice,Array.protyotype.slice.call相关推荐

  1. 【JavaScript笔记 · 基础篇(五)】Array全家桶(引用数据类型中的数组 / Array对象 / Array.prototype)

    文章目录 一. 引用数据类型中的数组 1.1 概述 1.2 初始化 1.2.1 字面量 1.2.2 构造函数模式 1.3 访问 1.4 length属性 1.5 数组遍历 1.6 类数组对象 1.6. ...

  2. JavaScript Array.prototype.some()

    本文来源于:http://itkaiyuan.com/2016/01/07/527.html 转载注明出处! some() 方法测试数组中某些元素是否通过了指定函数的测试. 语法 array.some ...

  3. Array.isArray() instanceof Array

    Array.isArray() 用于确定传递的值是否是一个 Array. H5新增的方法 ie9以上版本支持 Array.isArray([1, 2, 3]); // true Array.isArr ...

  4. [转载]Array.prototype.slice.call(arguments,1)原理

    Array.prototype.slice.call(arguments,1)该语句涉及两个知识点. arguments是一个关键字,代表当前参数,在javascript中虽然arguments表面上 ...

  5. js Array.prototype.slice.call(arguments,0) 理解

    Array.prototype.slice.call(arguments,0) 经常会看到这段代码用来处理函数的参数 网上很多复制粘帖说:Array.prototype.slice.call(argu ...

  6. Array.prototype.slice.call(arguments)对象转成数组

    转成数组的通用函数 1 var toArray = function(s){ 2 try{ 3 return Array.prototype.slice.call(s); 4 } catch(e){ ...

  7. Array.prototype.slice.call(arguments)

    Array.prototype.slice.call(arguments)能将具有length属性的对象转成数组,除了IE下的节点集合(因为ie下的dom对象是以com对象的形式实现的,js对象与co ...

  8. Array.prototype.slice.call

    Array.prototype.slice.call(arguments,0)就类似于arguments.slice(0),但因为arguments不是真正的Array,所以它没有slice这个方法. ...

  9. Array.prototype.slice.call 将伪数组转成真数组的原理是什么?

    好久没上SF,昨天上来看到一个问题,引起了我的兴趣.一番探索和研究后,有了此篇文章,也算是对该问题的解答. let pretendArr = {0:0,1:1,2:2,length:3}; [].sl ...

最新文章

  1. linux apache配置多线程,linux apache 日志配置
  2. 抛弃VS Code,我还能用啥编辑器?| 技术头条
  3. h.264码流解析_一个SPS的nalu及获取视频的分辨率
  4. 数据库里面的id不是连续的,遍历的时候
  5. 第四届国际软件自由日在西安邮电学院的发言
  6. Matlab 条形图实例
  7. 有趣的灵魂连墓碑都很酷! | 今日趣图
  8. JavaScript从入门到放弃 -(四)E5 新增方法
  9. seo提交工具_经验分享:SEO新手面对新网站应该如何去优化
  10. eviews 9.5新版本——平均预测、面板效应检验
  11. linux下如何部署php,linux如何部署php
  12. c vb java switch语句是_groovy嵌入switch语句 - Groovy教程
  13. 网络计算机自动显示,怎么设置电脑断网后自动报警提醒?
  14. spring源码解析之---InstantiationAwareBeanPostProcessor解析
  15. 如何在markdown中打出上标、下标和一些特殊符号 from jianshuer 这是朕的江山
  16. 作业报告12 定期存款利息计算器
  17. 哪些是性价比高的骨传导蓝牙耳机,五款骨传导蓝牙耳机推荐
  18. 安装sts插件遇到的问题,cannot perform
  19. 【linux】 下根目录,家目录区别
  20. Java开源Web开发框架

热门文章

  1. C#开发ActiveX控件及制作CAB包
  2. 几种字符串到byte[] 数组转化为String 的方法
  3. ListView(2)
  4. Pytorch —— 模型保存与加载
  5. 去哪儿-14-vuex_localstorage
  6. Golang基本数据类型的相互转换
  7. 扩展欧几里得exgcd算法 acm寒假集训日记22/1/12
  8. STM32 - 定时器的设定 - 基础-04 - 输出波形控制 - PWM 模式
  9. python爬虫requests源码链家_python爬虫——爬取链家房价信息(未完待续)
  10. a href点击无效_jquery click()方法模拟点击事件对a标签不生效的解决办法