前言
笔者在学习ECMAScript中会将arguments对象与数组混淆,现在理解清楚之后特来此记下,希望帮助大家理解。
描述
javascript是个很宽松的语言,ECMAScript中函数不介意传递进来多少个参数,也不在乎传进来参数是什么数据类型。即便你定义的函数只接收两个参数,在调用这个函数时也未必一定要传递两个参数,可以传递一个、三个甚至不传递参数,解析器也不会有怨言。
为什么会如此呢?
因为ECMAScript中的参数在内部是用一个数组来表示的。
在函数体内可以通过arguments对象来访问这个参数数组,从而获取传递给函数的每一个参数。
演示
function sayHi(){
alert("Hello " + arguments[0] + "," + arguments[1]);
}
原因:arguments对象只是与数组类似(它并不是Array的实例),可以通过使用方括号语法访问它的每一个元素(第一个元素arguments[0],第二个元素arguments[1],以此类推;使用length属性来确定传递进来多少个参数)
function howManyArgs(){
alert(arguments.length);
}
howManyArgs("string",45); //2
arguments对象可以与命名参数一起使用:
function doAdd(num1,num2){
if(arguments.length == 2){
alert(arguments[0] + num2);
}
}