简单谈谈Javascript函数中的arguments


Posted in Javascript onFebruary 09, 2017

一、arguments的面貌

在javascript中所有的函数内部都包含了一个隐藏的变量叫arguments;它存放着所有传递到这个函数中的参数;

那么我们打开实例看看arguments的输出形式

(function fn(){
 console.log(arguments)
})(1,2,3,4)

简单谈谈Javascript函数中的arguments

结果好像是类似数组的形式打印在控制台,相信大多数人包括我看到这种输出就会认为arguments是一个数组,那么既然是数组就可以用数组的一些方法了吧,再看下一个例子;

(function fn(){
 arguments.push(5)
 console.log(arguments)
})(1,2,3,4)

简单谈谈Javascript函数中的arguments

结果报错了- -!;(在项目中我就是踩到了这个坑);

那我们就会有一个疑惑了,既然是数组为什么不能用push方法呢,其他的像pop,slice也不行么,是的,都不行,虽然arguments也能通过下标的形式获取到对应位置的参数,当本质上不算是真正的数组;

我们通过instanceof打印看看它是不是Array的孩子

(function fn(){
 console.log(arguments instanceof Array)
})()

简单谈谈Javascript函数中的arguments

果不其然真不是数组,那么我们就会联想到它就是个对象了;

虽然它也能用for循环遍历到里面的参数,但把它转为真正的数组才是更好的选择;

二、转化为数组

转化的方法有很多,对象冒充的方式传递给Array.prototype或遍历push到空数组或传递给另一个函数等等。。都可以完成,下面简单介绍几个转化的方法,遍历push到空数组的方法就不细讲了;

第一种方法:

(function fn(){
 var arr = Array.prototype.slice.call(arguments)
 arr.push(5)
 console.log(arr)
})(1,2,3,4)

简单谈谈Javascript函数中的arguments

这种转化方式比较慢,在性能不好的情况下不推荐这种写法;

第二种方法:

function fn() {
 fnArr.apply(null, arguments);
}
function fnArr(a,b,c,d) {
 ···
}

个人推荐这种做法;

总结

以上就是这篇文章的全部内容了,虽然写的不多,但还是希望大家能在项目的过程当中不要误踩了arguments的坑,希望本文能对大家有所帮助。

Javascript 相关文章推荐
IE关闭时判断及AJAX注销案例学习
Feb 18 Javascript
jquery中radio checked问题
Mar 16 Javascript
JQuery简单实现锚点链接的平滑滚动
May 03 Javascript
javascript中Array()数组函数详解
Aug 23 Javascript
javascript时间戳和日期字符串相互转换代码(超简单)
Jun 22 Javascript
jQuery实现邮箱下拉列表自动补全功能
Sep 08 Javascript
基于node.js之调试器详解
Aug 22 Javascript
Angularjs实现上传图片预览功能
Sep 01 Javascript
vue页面跳转后返回原页面初始位置方法
Feb 11 Javascript
JS执行控制之节流模式实例分析
Dec 21 Javascript
JS中实现浅拷贝和深拷贝的代码详解
Jun 05 Javascript
原生js+canvas实现下雪效果
Aug 02 Javascript
javascript 中设置window.location.href跳转无效问题解决办法
Feb 09 #Javascript
微信小程序之picker日期和时间选择器
Feb 09 #Javascript
BootStrap 弹出层代码
Feb 09 #Javascript
jQuery插件form-validation-engine正则表达式操作示例
Feb 09 #Javascript
javascript history对象详解
Feb 09 #Javascript
jquery dialog获取焦点的方法
Feb 09 #Javascript
jQuery实现淡入淡出的模态框
Feb 09 #Javascript
You might like
深入解析php中的foreach函数
2013/08/31 PHP
BOM与DOM的区别分析
2010/10/26 Javascript
jQuery Tips 为AJAX回调函数传递额外参数的方法
2010/12/28 Javascript
yepnope.js 异步加载资源文件
2011/09/08 Javascript
Jquery通过Ajax方式来提交Form表单的具体实现
2013/11/07 Javascript
浅析jquery ajax异步调用方法中不能给全局变量赋值的原因及解决方法
2014/01/10 Javascript
深入剖析JavaScript中的枚举功能
2014/03/06 Javascript
JavaScript获取表单enctype属性的方法
2015/04/02 Javascript
JS插件overlib用法实例详解
2015/12/26 Javascript
移动端js触摸事件详解
2016/09/18 Javascript
jQuery实现ToolTip元素定位显示功能示例
2016/11/23 Javascript
JS条形码(一维码)插件JsBarcode用法详解【编码类型、参数、属性】
2017/04/19 Javascript
Vue.js弹出模态框组件开发的示例代码
2017/07/26 Javascript
vue项目中使用lib-flexible解决移动端适配的问题解决
2018/08/23 Javascript
微信小程序实现的点击按钮 弹出底部上拉菜单功能示例
2018/12/20 Javascript
微信小程序自定义键盘 内部虚拟支付
2018/12/20 Javascript
vue 导航守卫和axios拦截器有哪些区别
2020/12/19 Vue.js
Pthon批量处理将pdb文件生成dssp文件
2015/06/21 Python
Python安装lz4-0.10.1遇到的坑
2018/05/20 Python
python数据结构学习之实现线性表的顺序
2018/09/28 Python
python 执行终端/控制台命令的例子
2019/07/12 Python
Flask框架模板继承实现方法分析
2019/07/31 Python
python OpenCV GrabCut使用实例解析
2019/11/11 Python
Python批量启动多线程代码实例
2020/02/18 Python
基于python实现图片转字符画代码实例
2020/09/04 Python
selenium与xpath之获取指定位置的元素的实现
2021/01/26 Python
python如何用matplotlib创建三维图表
2021/01/26 Python
求职简历自荐信范文
2013/10/21 职场文书
爱情检讨书大全
2014/01/21 职场文书
春节请假条
2014/04/11 职场文书
党员学习中共十八大报告思想汇报
2014/09/15 职场文书
2014党员整改措施思想汇报
2014/10/07 职场文书
2014年教学工作总结
2014/11/13 职场文书
小马王观后感
2015/06/11 职场文书
研究生学习计划书应该怎么写?
2019/09/10 职场文书
如何有效防止sql注入的方法
2021/05/25 SQL Server