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与bind方法的区别
Dec 18 Javascript
基于jQuery实现的仿百度首页滑动选项卡效果代码
Nov 16 Javascript
精彩的Bootstrap案例分享 重点在注释!(选项卡、栅格布局)
Jul 01 Javascript
详解Javascript数据类型的转换规则
Dec 12 Javascript
canvas绘制表盘时钟
Jan 23 Javascript
webpack+react+antd脚手架优化的方法
Apr 02 Javascript
JavaScript变量声明var,let.const及区别浅析
Apr 23 Javascript
Javascript的console['']常用输入方法汇总
Apr 26 Javascript
js根据需要计算数组中重复出现某个元素的个数
Jan 18 Javascript
js回调函数仿360开机
Dec 26 Javascript
深入浅析vue全局环境变量和模式
Apr 28 Javascript
如何用JavaScipt测网速
May 09 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
《OVERLORD》第四季,终于等到你!
2020/03/02 日漫
php过滤XSS攻击的函数
2013/11/12 PHP
php删除数组元素示例分享
2014/02/17 PHP
初识laravel5
2015/03/02 PHP
PHP 将数组打乱 shuffle函数的用法及简单实例
2016/06/17 PHP
PHP切割汉字的常用方法实例总结
2019/04/27 PHP
利用PHP内置SERVER开启web服务(本地开发使用)
2021/03/09 PHP
jquery实现页面关键词高亮显示的方法
2015/03/12 Javascript
JS 日期与时间戮相互转化的简单实例
2016/06/22 Javascript
JavaScript数组去重由慢到快由繁到简(优化篇)
2016/08/26 Javascript
解决vue-router中的query动态传参问题
2018/03/20 Javascript
JS实现将对象转化为数组的方法分析
2019/01/21 Javascript
Vue自定义全局Toast和Loading的实例详解
2019/04/18 Javascript
基于JS抓取某高校附近共享单车位置 使用web方式展示位置变化代码实例
2019/08/27 Javascript
Python冒泡排序注意要点实例详解
2016/09/09 Python
python回调函数中使用多线程的方法
2017/12/25 Python
关于Django显示时间你应该知道的一些问题
2017/12/25 Python
对python中的for循环和range内置函数详解
2018/04/17 Python
用Python编写一个高效的端口扫描器的方法
2018/12/20 Python
Python3中lambda表达式与函数式编程讲解
2019/01/14 Python
对python中不同模块(函数、类、变量)的调用详解
2019/07/16 Python
vue学习笔记之动态组件和v-once指令简单示例
2020/02/29 Python
Python 将 QQ 好友头像生成祝福语的实现代码
2020/05/03 Python
如何解决python多种版本冲突问题
2020/10/13 Python
纽约的奢华内衣店:Journelle
2016/07/29 全球购物
英国领先的珍珠首饰品牌:Orchira
2016/09/11 全球购物
小狗电器官方商城:中国高端吸尘器品牌
2017/03/29 全球购物
视图的作用
2014/12/19 面试题
Python里面如何实现tuple和list的转换
2012/06/13 面试题
表彰先进的通报
2014/01/31 职场文书
一名老师的自我评价
2014/02/07 职场文书
授权委托书
2014/07/31 职场文书
2015年试用期工作总结
2014/12/12 职场文书
解决SpringBoot文件上传临时目录找不到的问题
2021/07/01 Java/Android
在 Python 中利用 Pool 进行多线程
2022/04/24 Python
浅谈Redis的事件驱动模型
2022/05/30 Redis