arguments详解

js是一门相当灵活的语言。当我们在js中在调用一个函数的时候,我们经常会给这个函数传递一些参数,js把传入到这个函数的全部参数存储在一个叫做arguments的东西里面,那么这到底是什么东西?

首先来建一个函数,简单的看一下里面的一些情况

function arg(num1,num2) {
        console.log(arguments);
        console.log(arguments instanceof  Array);
        console.log(arguments instanceof  Object);
        return arguments[0]+arguments[1];
    }
    console.log(arg(1,2))

从结果中我们可以的出一下:arguments它并不是一个数组,而是一个对象,但我们可以把它当做数组处理。其实它就是一个类数组对象

类数组对象是一个特殊的对象,它的属性名是按照传入参数的序列来的,第1个参数的属性名是’0’,第2个参数的属性名是’1’,以此类推,并且它还有length属性,存储的是当前传入函数参数的个数。类数组对象和数组都是对象这个妈生的,但是数组是大哥比类数组对象多了很多其他的玩具(方法),类数组对象只是长得很像数组的弟弟而已。

因为类数组对象和数组有很多的共性,所以我们经常可以用call方法,让类数组对象也使用的数组的一些方法,比如我们想将其转换成数组

var args=[].slice.call(arguments);

这样就可以了,细心的人会发现arguments里面有个callee属性,点开看是函数本身,我感觉这个callee有点像构造函数里面prototype属性中的constructor差不多。不过callee用的比较少,而且会逐渐被取消。

原文地址:https://www.cnblogs.com/yuanzhiguo/p/9897326.html