javascript Array.prototype.slice的使用示例


Posted in Javascript onNovember 14, 2013

经常的,可以看到Array.prototype.slice(arguments, 0); 这个写法可以用于function() {} 内,这样可以将函数的参数列表转换成一个真正的数组。请看一个例子:

var slice = Array.prototype.slice;
var toString = Object.prototype.toString;
(function() {
  var args = arguments;
  console.log(args, toString.call(args)); // [1, 2, 3] "[object Arguments]" 
  var argsArr = slice(args, 0);
  console.log(argsArr, toString.call(argsArr)); // [1, 2, 3] "[object Array]" 
}(1,2,3))

我们可以看到函数的参数列表arguments通过slice调用以后,一秒钟变Array了。
同样的,也可以将选中的DOM元素转换成数组:
slice.call(document.querySelectorAll("div"));

顺藤摸瓜,我们想想,slide方法是否可以将对象转换成数组呢?请看例子:
console.log(slice.call('string')); // ["s", "t", "r", "i", "n", "g"] 
console.log(slice.call(new String('string'))); // ["s", "t", "r", "i", "n", "g"]

每次,字符串会直接被转换成了一个数组。
但是,数字,布尔值的会转换成一个空的数组:
console.log(slice.call(33)); 
console.log(slice.call(true));

普通的对象也会被转换成空数组,除非你给它加上一个length属性:
console.log(slice.call({name: 'obj'})); // []
console.log(slice.call({0: 'zero', 1: 'one'})); // []
console.log(slice.call({0: 'zero', 1: 'one', name: 'obj', length: 2}));  // ["zero", "one"]

还有,它还可以用来clone数组:
var srcArr = [1,2,3];
var newArr = srcArr.slice(0);
console.log(srcArr, newArr);    // [1,2,3] [1,2,3]
console.log(srcArr == newArr);  // false
Javascript 相关文章推荐
utf8的编码算法 转载
Dec 27 Javascript
JQuery onload、ready概念介绍及使用方法
Apr 27 Javascript
jquery实现checkbox全选全不选的简单实例
Dec 31 Javascript
JS高级调试技巧:捕获和分析 JavaScript Error详解
Mar 16 Javascript
avascript中的自执行匿名函数应用示例
Sep 15 Javascript
JQuery中的事件及动画用法实例
Jan 26 Javascript
JavaScript中的pow()方法使用详解
Jun 15 Javascript
浅谈javascript 函数表达式和函数声明的区别
Jan 05 Javascript
JS仿Base.js实现的继承示例
Apr 07 Javascript
jquery 键盘事件的使用方法详解
Sep 13 jQuery
Angular使用Md5加密的解决方法
Sep 16 Javascript
7个好用的JavaScript技巧分享(译)
May 07 Javascript
js取消单选按钮选中示例代码
Nov 14 #Javascript
js实现目录定位正文示例
Nov 14 #Javascript
通过action传过来的值在option获取进行验证的方法
Nov 14 #Javascript
javascript间隔刷新的简单实例
Nov 14 #Javascript
Enter转换为Tab的小例子(兼容IE,Firefox)
Nov 14 #Javascript
js中prototype用法详细介绍
Nov 14 #Javascript
JavaScript图片放大技术(放大镜)实现代码分享
Nov 14 #Javascript
You might like
如何获得PHP相关资料
2006/10/09 PHP
隐藏你的.php文件的实现方法
2007/03/19 PHP
实用函数8
2007/11/08 PHP
php网站来路获取代码(针对搜索引擎)
2010/06/08 PHP
PHP入门经历和学习过程分享
2014/04/11 PHP
Linux平台php命令行程序处理管道数据的方法
2016/11/10 PHP
phpstudy的php版本自由修改的方法
2017/10/18 PHP
PHP+MySQL使用mysql_num_rows实现模糊查询图书信息功能
2018/05/31 PHP
微信公众平台开发教程③ PHP实现微信公众号支付功能图文详解
2019/04/10 PHP
document 和 document.all 分别什么时候用
2006/06/22 Javascript
javascript getElementsByName()的用法说明
2009/07/31 Javascript
checkbox设置复选框的只读效果不让用户勾选
2013/08/12 Javascript
jQuery(js)获取文字宽度(显示长度)示例代码
2013/12/31 Javascript
javascript封装addLoadEvent实现页面同时加载执行多个函数的方法
2016/07/25 Javascript
jQuery动态生成不规则表格(前后端)
2017/02/21 Javascript
深入对Vue.js $watch方法的理解
2017/03/20 Javascript
ES6新特性之类(Class)和继承(Extends)相关概念与用法分析
2017/05/24 Javascript
javascript 日期相减-在线教程(附代码)
2017/08/17 Javascript
微信小程序实现两个页面传值的方法分析
2018/12/11 Javascript
js Math数学简单使用操作示例
2020/03/13 Javascript
SpringBoot在yml配置文件中配置druid的操作
2020/11/16 Javascript
Python 判断图像是否读取成功的方法
2019/01/26 Python
浅谈pycharm使用及设置方法
2019/09/09 Python
Python高级property属性用法实例分析
2019/11/19 Python
基于python的列表list和集合set操作
2019/11/24 Python
CSS3中利用animation属性创建雪花飘落特效
2014/05/14 HTML / CSS
关于HTML5+ API plusready的兼容问题
2020/11/20 HTML / CSS
LivingSocial爱尔兰:爱尔兰本地优惠
2018/08/10 全球购物
Athleta官网:购买女士瑜伽服、技术运动服和休闲运动服
2020/11/12 全球购物
饲料采购员岗位职责
2013/12/19 职场文书
社区庆中秋节活动方案
2014/02/07 职场文书
毕业生就业协议书
2014/04/11 职场文书
情况说明书格式范文
2014/05/06 职场文书
2014年高中班主任工作总结
2014/11/08 职场文书
重阳节简报
2015/07/20 职场文书
小学运动会报道稿
2015/07/22 职场文书