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使用手册之 事件处理
Mar 24 Javascript
jQuery 跨域访问问题解决方法
Dec 02 Javascript
当达到输入长度时表单自动切换焦点
Apr 06 Javascript
ExtJS中设置下拉列表框不可编辑的方法
May 07 Javascript
jQuery+css实现的蓝色水平二级导航菜单效果代码
Sep 11 Javascript
6种javascript显示当前系统时间代码
Dec 01 Javascript
AngularJS使用angular-formly进行表单验证
Dec 27 Javascript
浅析JS抽象工厂模式
Dec 14 Javascript
Vue实现底部侧边工具栏的实例代码
Sep 03 Javascript
微信小程序自定义可滑动顶部TabBar选项卡实现页面切换功能示例
May 14 Javascript
Vue CLI3移动端适配(px2rem或postcss-plugin-px2rem)
Apr 27 Javascript
基于JS实现操作成功之后自动跳转页面
Sep 25 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脚本监控Nginx 502错误并自动重启php-fpm
2015/05/13 PHP
修复ShopNC使用QQ 互联时提示100010 错误
2015/11/08 PHP
PHP 进度条函数的简单实例
2017/09/19 PHP
关于 Laravel Redis 多个进程同时取队列问题详解
2017/12/25 PHP
thinkphp5 migrate数据库迁移工具
2018/02/20 PHP
CL vs ForZe BO5 第三场 2.13
2021/03/10 DOTA
js静态方法与实例方法分析
2011/07/04 Javascript
jQuery 一个图片切换的插件
2011/10/09 Javascript
jquery $.getJSON()跨域请求
2011/12/21 Javascript
jquery中邮箱地址 URL网站地址正则验证实例代码
2013/09/15 Javascript
javascript动态添加、修改、删除对象的属性与方法详解
2014/01/27 Javascript
php的文件上传入门教程(实例讲解)
2014/04/10 Javascript
一个简单的jquery的多选下拉框(自写)
2014/05/05 Javascript
JavaScript字符串常用类使用方法汇总
2015/04/14 Javascript
jQuery树形下拉菜单特效代码分享
2015/08/15 Javascript
jQuery+canvas实现简单的球体斜抛及颜色动态变换效果
2016/01/28 Javascript
Bootstrap Metronic完全响应式管理模板学习笔记
2016/07/08 Javascript
微信小程序 获取设备信息 API实例详解
2016/10/02 Javascript
Angularjs使用ng-repeat中$even和$odd属性的注意事项
2016/12/31 Javascript
Vue-cli proxyTable 解决开发环境的跨域问题详解
2017/05/18 Javascript
vue中element 的upload组件发送请求给后端操作
2020/09/07 Javascript
Python松散正则表达式用法分析
2016/04/29 Python
python实现随机梯度下降(SGD)
2020/03/24 Python
Python cookbook(数据结构与算法)从序列中移除重复项且保持元素间顺序不变的方法
2018/03/13 Python
python爬虫正则表达式之处理换行符
2018/06/08 Python
python实现任意位置文件分割的实例
2018/12/14 Python
学习python可以干什么
2019/02/26 Python
python实现windows倒计时锁屏功能
2019/07/30 Python
python读写csv文件并增加行列的实例代码
2019/08/01 Python
Python selenium的基本使用方法分析
2019/12/21 Python
python分别打包出32位和64位应用程序
2020/02/18 Python
武汉英思工程科技有限公司–ORACLE面试测试题目
2012/04/30 面试题
高中英语教学反思
2014/02/04 职场文书
阳光体育活动实施方案
2014/05/25 职场文书
春季运动会开幕词
2015/01/28 职场文书
2015初中团支部工作总结
2015/07/21 职场文书