什么是JS中的arguments对象

JavaScript019

什么是JS中的arguments对象,第1张

参考下我的js笔记

在函数体内,标识符arguments是指向实参对象的引用,实参对象是一个类数组对象 arguments[0],arguments.length

arguments是什么?

答:1:arguments是收到的实参副本

在词法分析中, 首先按形参形成AO的属性,值为undefined

当实参传来时, 再修改AO的相应属性.

2:并把所有收到实参收集起来,放到一个arguments对象里

t(a,b,c){},

调用时: t(1,2,3,4,5) 5个参数

此时 , AO属性只有a,bc,3个属性, arguments里有1,2,3,4,5, 所有的值

对于超出形参个数之外的实参, 可以通过arguments来获得

3:arguments 的索引 从 0, 1,2,....递增,与实参逐个对应

4:arguments.length 属性代表实参的个数

5:arguments一定不是数组, 是长的比较像数组的一个对象,虽然也有length属性

6:arguments每个函数都会有,因此,arguemnts只会在内部找自身的arguments,

无法引用到外层的arguments

<script type="text/javascript">

// 求圆形面积,矩形面积, 三角形面积

function area () {

if(arguments.length == 1) {

alert(3.14 * arguments[0] * arguments[0])

} else if(arguments.length == 2) {

alert(arguments[0] * arguments[1])

} else if(arguments.length == 3) {

alert(arguments[0] + arguments[1] + arguments[2])

} else {

return null

}

}

area(10,20,30)

</script>

伪数组(类数组):

无法直接调用数组方法或期望length属性有什么特殊的行为,不具有数组的push,pop等方法,但仍可以对真正数组遍历方法来遍历它们。典型的是函数的argument参数,还有像调用getElementsByTagName,document.childNodes之类的,它们都返回NodeList对象都属于伪数组。可以使用Array.prototype.slice.call(fakeArray)将数组转化为真正的Array对象。

function log(){

var args = Array.prototype.slice.call(arguments)//为了使用unshift数组方法,将argument转化为真正的数组

args.unshift('(app)')console.log.apply(console, args)

}

这里把符合以下条件的对象称为伪数组:

1,具有length属性

2,按索引方式存储数据

3,不具有数组的push,pop等方法

1,function内的arguments 。

2,通过document.forms,Form.elements,Select.options,document.getElementsByName() ,

document.getElementsByTagName() ,childNodes/children 等方式获取的集合(HTMLCollection,NodeList)等。

3,特殊写法的对象 ,如

Js代码 收藏代码

var obj={}

obj[0] = "一"

obj[1] = "二"

obj[2] = "三"

obj.length = 3