关于arguments

1.每个函数都有一个arguments属性,表示函数的实参集合。

2.arguments不是数组而是一个对象,但它和数组很相似,所以通常称为类数组对象,以后看到类数组其实就表示arguments。
arguments对象不是一个 Array 。它类似于Array,但除了length属性和索引元素之外没有任何Array属性。例如,它没有 pop 方法。但是它可以被转换为一个真正的Array:

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

// ES2015
const args = Array.from(arguments);
const args = [...arguments];

3.arguments有length属性,可以用arguments[length]显示调用:

function func(){
     for(var i=0;i<arguments.length;i++){
     alert(typeof(arguments))//object
         console.log(arguments[i]);
    }      
}

func("a",17,[1,2,3],{name:"javascript",type:"language"});

/*
a
17
[1, 2, 3]
{name: "javascript", type: "language"}
*/

4.Array.prototype.slice.call(arguments)
这里写图片描述

function useArguments() {
    var arr=Array.prototype.slice.call(arguments)//把arguments类数组转化为数组
    return eval(arr.join("+"));//求和
}

arguments不是真正的数组,不能直接使用slice方法,所以才会用Array对象原型链上面的slice方法去截取arguments,返回的自然是一个数组。我们看看来call是干啥的

var obj1={
    name:"java"
}
window.name="javascript";
var func=function(){
    console.log(this.name);
}

func();  //javasript
func.call(obj1); //java

可以很清楚的看到,call的一个作用是可以改变函数运行的作用域,func中的this指向了obj1,所以Array.prototype.slice是一个方法,将它call(arguments)之后,Array.prototype.slice中的this就指向了arguments对象了。

注意当的调用参数为函数的第一个参数之后的全部参数,可以这样写:

var args = Array.prototype.slice.call(arguments,1);

你这句可以分两步,先赋予arguments数组的slice方法,再进一步调用,像这样:

var trueArray=Array.prototype.slice.call(arguments);//让arguments具有数组的slice方法
    var args=trueArray.slice(1);
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值