简单谈谈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 相关文章推荐
图片自动更新(说明)
Oct 02 Javascript
基于jquery实现的可以编辑选择的下拉框的代码
Nov 19 Javascript
jquery自定义类似$.ajax()的方法实现代码
Aug 13 Javascript
网站繁简切换的JS遇到页面卡死的解决方法
Mar 12 Javascript
EasyUI,点击开启编辑框,并且编辑框获得焦点的方法
Mar 01 Javascript
vue.js实现含搜索的多种复选框(附源码)
Mar 23 Javascript
微信小程序request出现400的问题解决办法
May 23 Javascript
微信小程序分页加载的实例代码
Jul 11 Javascript
JS数组去重常用方法实例小结【4种方法】
May 28 Javascript
详解Vue webapp项目通过HBulider打包原生APP
Jun 29 Javascript
js实现下拉框二级联动
Dec 04 Javascript
JS实现压缩上传图片base64长度功能
Dec 03 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中异常处理的一些方法整理
2015/07/03 PHP
PHP yii实现model添加默认值的方法(两种方法)
2016/11/10 PHP
js jquery做的图片连续滚动代码
2008/01/06 Javascript
js/jQuery对象互转(快速操作dom元素)
2013/02/04 Javascript
深入理解JavaScript系列(46):代码复用模式(推荐篇)详解
2015/03/04 Javascript
理解js回收机制通俗易懂版
2016/02/29 Javascript
解决微信浏览器Javascript无法使用window.location.reload()刷新页面
2016/06/21 Javascript
AngularJS 输入验证详解及实例代码
2016/07/28 Javascript
jquery ajaxfileupload异步上传插件使用详解
2017/02/08 Javascript
微信小程序商城项目之购物数量加减(3)
2017/04/17 Javascript
Vue通过input筛选数据
2020/10/26 Javascript
实例详解JavaScript中setTimeout函数的执行顺序
2017/07/12 Javascript
nodejs基于mssql模块连接sqlserver数据库的简单封装操作示例
2018/01/05 NodeJs
Vue使用vue-draggable 插件在不同列表之间拖拽功能
2020/03/12 Javascript
JS数组的常用10种方法详解
2020/05/08 Javascript
vue中echarts的用法及与elementui-select的协同绑定操作
2020/11/17 Vue.js
[47:46]完美世界DOTA2联赛 Magma vs GXR 第三场 11.07
2020/11/10 DOTA
Python 探针的实现原理
2016/04/23 Python
浅谈python爬虫使用Selenium模拟浏览器行为
2018/02/23 Python
Python爬虫设置代理IP的方法(爬虫技巧)
2018/03/04 Python
在Windows中设置Python环境变量的实例讲解
2018/04/28 Python
python处理DICOM并计算三维模型体积
2019/02/26 Python
Python使用sax模块解析XML文件示例
2019/04/04 Python
python3字符串操作总结
2019/07/24 Python
Python爬虫 bilibili视频弹幕提取过程详解
2019/07/31 Python
在Tensorflow中查看权重的实现
2020/01/24 Python
离线状态下在jupyter notebook中使用plotly实例
2020/04/24 Python
在keras下实现多个模型的融合方式
2020/05/23 Python
提供世界各地便宜的机票:Sky-tours
2016/07/21 全球购物
事业单位公务员的职业生涯规划
2014/01/15 职场文书
弘扬雷锋精神演讲稿
2014/05/10 职场文书
创先争优个人承诺书
2014/08/30 职场文书
2014矛盾纠纷排查调处工作总结
2014/12/09 职场文书
多人股份制合作协议书
2016/03/19 职场文书
java executor包参数处理功能 
2022/02/15 Java/Android
教你使用Jenkins集成Harbor自动发布镜像
2022/04/03 Servers