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 相关文章推荐
jQuery live( type, fn ) 委派事件实现
Oct 11 Javascript
Dojo 学习笔记入门篇 First Dojo Example
Nov 15 Javascript
actionscript与javascript的区别
May 25 Javascript
jQuery中RadioButtonList的功能及用法实例介绍
Aug 23 Javascript
jquery validation验证表单插件
Jan 07 Javascript
jQuery插件FusionCharts实现的2D饼状图效果【附demo源码下载】
Mar 03 Javascript
jQuery Layer弹出层传值到父页面的实现代码
Aug 17 jQuery
Bootstrap Table快速完美搭建后台管理系统
Sep 20 Javascript
详解VUE2.X过滤器的使用方法
Jan 11 Javascript
angular.js实现列表orderby排序的方法
Oct 02 Javascript
对angularJs中controller控制器scope父子集作用域的实例讲解
Oct 08 Javascript
Vue作用域插槽实现方法及作用详解
Jul 08 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学习笔记之二
2011/01/17 PHP
解析左右值无限分类的实现算法
2013/06/20 PHP
利用php+mcDropdown实现文件路径可在下拉框选择
2013/08/07 PHP
php共享内存段示例分享
2014/01/20 PHP
zf框架的session会话周期及次数限制使用示例
2014/03/13 PHP
php格式化金额函数分享
2015/02/02 PHP
Laravel框架实现model层的增删改查(CURD)操作示例
2018/05/12 PHP
初学prototype,发个JS接受URL参数的代码
2006/09/25 Javascript
jQuery学习笔记之控制页面实现代码
2012/02/27 Javascript
如何减少浏览器的reflow和repaint
2015/02/26 Javascript
js实现瀑布流的三种方式比较
2020/06/28 Javascript
JavaScript实现的SHA-1加密算法完整实例
2016/02/02 Javascript
详解jQuery UI库中文本输入自动补全功能的用法
2016/04/23 Javascript
基于JS判断iframe是否加载成功的方法(多种浏览器)
2016/05/13 Javascript
利用JQuery实现datatables插件的增加和删除行功能
2017/01/06 Javascript
xmlplus组件设计系列之分隔框(DividedBox)(8)
2017/05/02 Javascript
vue二级菜单导航点击选中事件的方法
2018/09/12 Javascript
vue实现循环切换动画
2018/10/17 Javascript
微信小程序实现星级评价
2019/11/20 Javascript
微信小程序换肤功能实现代码(思路详解)
2020/08/25 Javascript
[02:42]DOTA2城市挑战赛收官在即 四强之争风起云涌
2018/06/05 DOTA
[01:01:23]完美世界DOTA2联赛PWL S2 Forest vs FTD.C 第一场 11.26
2020/11/30 DOTA
python ip正则式
2009/05/07 Python
Python通过matplotlib绘制动画简单实例
2017/12/13 Python
使用Python进行AES加密和解密的示例代码
2018/02/02 Python
python中的TCP(传输控制协议)用法实例分析
2019/11/15 Python
基于numpy中的expand_dims函数用法
2019/12/18 Python
python无序链表删除重复项的方法
2020/01/17 Python
详解如何解决使用JSON.stringify时遇到的循环引用问题
2021/03/23 Javascript
护士实习自我鉴定
2013/10/22 职场文书
2014年关工委工作总结
2014/11/17 职场文书
保险公司反洗钱宣传活动总结
2015/05/08 职场文书
2016年5月份红领巾广播稿
2015/12/21 职场文书
nginx处理http请求实现过程解析
2021/03/31 Servers
CSS实现九宫格布局(自适应)的示例代码
2022/02/12 HTML / CSS
Python OpenCV超详细讲解读取图像视频和网络摄像头
2022/04/02 Python