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 学习笔记 传智博客佟老师附详细注释
Sep 12 Javascript
js语法学习之判断一个对象是否为数组
May 13 Javascript
jQuery类选择器用法实例
Dec 23 Javascript
自动化测试读写64位操作系统的注册表
Aug 15 Javascript
jquery中用函数来设置css样式
Dec 22 Javascript
vue小图标favicon不显示的解决方案
Sep 19 Javascript
微信小程序promsie.all和promise顺序执行
Oct 27 Javascript
webpack构建换肤功能的思路详解
Nov 27 Javascript
node.js中路由,中间件,ge请求和post请求的参数详解
Dec 26 Javascript
如何优雅地在vue中添加权限控制示例详解
Mar 07 Javascript
小程序测试后台服务的方法(ngrok)
Mar 08 Javascript
JS字符串和数组如何实现相互转化
Jul 02 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
用Socket发送电子邮件(利用需要验证的SMTP服务器)
2006/10/09 PHP
php给每个段落添加空格的方法
2015/03/20 PHP
PHP实现的Redis多库选择功能单例类
2017/07/27 PHP
PHP开发实现微信退款功能示例
2017/11/25 PHP
PHP PDOStatement::fetchAll讲解
2019/01/31 PHP
解决php扩展安装不生效问题
2019/10/25 PHP
excel操作之Add Data to a Spreadsheet Cell
2007/06/12 Javascript
检测是否已安装 .NET Framework 3.5的js脚本
2009/02/14 Javascript
解决jquery .ajax 在IE下卡死问题的解决方法
2009/10/26 Javascript
jQuery EasyUI API 中文文档 - ComboGrid 组合表格
2011/10/13 Javascript
Javascript的数组与字典用法与遍历对象的属性技巧
2012/11/07 Javascript
常用的Javascript数据验证插件
2015/08/04 Javascript
Jquery基础教程之DOM操作
2015/08/19 Javascript
三种AngularJS中获取数据源的方式
2016/02/02 Javascript
Windows环境下npm install 报错: operation not permitted, rename的解决方法
2016/09/26 Javascript
原生js实现手风琴功能(支持横纵向调用)
2017/01/13 Javascript
用javascript获取任意颜色的更亮或更暗颜色值示例代码
2017/07/21 Javascript
Vue项目组件化工程开发实践方案
2018/01/09 Javascript
vue 指令之气泡提示效果的实现代码
2018/10/18 Javascript
Vue.js 事件修饰符的使用教程
2018/11/01 Javascript
python实现简单tftp(基于udp协议)
2018/07/30 Python
如何用Python制作微信好友个性签名词云图
2019/06/28 Python
PyInstaller将Python文件打包为exe后如何反编译(破解源码)以及防止反编译
2020/04/15 Python
Python可以实现栈的结构吗
2020/05/27 Python
python 实现压缩和解压缩的示例
2020/09/22 Python
一篇文章带你搞定Ubuntu中打开Pycharm总是卡顿崩溃
2020/11/02 Python
OpenCV+Python3.5 简易手势识别的实现
2020/12/21 Python
python 获取计算机的网卡信息
2021/02/18 Python
Feelunique澳大利亚:欧洲的化妆品零售电商
2019/12/18 全球购物
财务管理个人自荐书范文
2013/11/24 职场文书
《狮子和兔子》教学反思
2014/03/02 职场文书
货物运输服务质量承诺书
2014/05/29 职场文书
土建技术员岗位职责
2015/04/11 职场文书
2015年“世界无车日”活动方案
2015/05/06 职场文书
养成教育工作总结
2015/08/13 职场文书
《地。-关于地球的运动-》单行本第七集上市,小说家朝井辽献上期待又害怕的推荐文
2022/03/31 日漫