第27天 说说你对arguments的理解,它是数组吗?
object like array
arguments
是一个对象。
js不能像java一样实现重载,arguments
对象可以模拟重载。
js中每个函数都会有arguments
这个实例,它引用着函数的实参,可以用数组下标的方式"[]"引用arguments
的元素。arguments.length
为函数实参个数,arguments.callee
引用函数自身。
arguments他的特性和使用方法
特性:
1.arguments对象和Function是分不开的。
2.因为arguments这个对象不能显式创建。
3.arguments对象只有函数开始时才可用。
使用方法:
虽然arguments对象并不是一个数组,但是访问单个参数的方式与访问数组元素的方式相同
例如:
arguments[0],arguments[1]...
arguments并不是一个数组, 但是它有length属性以及可以以下标的形式取值
arguments 不是数组,是类数组。
类数组 转 数组的方法有
用来获取函数参数 [].slice.call(arguments)
es6 显式提供 function foo(...args){}
arguments.callee 在匿名函数中指向这个函数
严格模式禁用了arguments.callee
arguments是个伪数组,它有数组的length以及下标取值;但是它不能用数组的一些方法,例如:Array.push()之类的
var list = document.getElementById('test-list');
var listchild = list.children;
那这种ul标签下li获取出来的listchild也是类数组了呗,难怪无法直接foreach
arguments
并不是数组,是一个 array like 对象,它有 length
这个属性。通常情况下,为了使用方便我们会把 arguments
转成数组,方法有下面几种。即使不转为数组,可以使用下标访问。如 arguments[0]
。
[...arguments]
Array.from(arguments)
[].slice.call(arguments)
一般情况下不会对 arguments
进行操作。但在实现一些低级或者通用功能时候会使用到,如实现一个泛柯理化的函数,或者根据参数的数量执行不同的方法(类似函数的重载)。
类数组对象(js权威指南)记得第一次啃书就看的这一节,所以这个名词记得非常清楚
他是一个对象,是类数组对象(js权威指南),他有着和数组几乎一样的api,比如length,自增key,增加一个key自动增加length,使之可以用arg[0]来访问数据
可以通过arguments来访问,传入的参数,arg[0]
如果更改了arguments的值的话,那么传入的参数也会被改变,因为前者是后者的一个引用;
var list = document.getElementById('test-list'); var listchild = list.children;
那这种ul标签下li获取出来的listchild也是类数组了呗,难怪无法直接foreach
是的,目前好像只有这2个情况会产生类数组对象
1.实参列表,是类数组,不是数组
2.是传入参数的一个镜像(浅拷贝)
3.arguments.callee是函数本身, 严格模式禁用arguments.callee
[...arguments]
Array.from(arguments)
[].slice.call(arguments)
arguments并不是一个数组, 但是它有length属性以及可以以下标的形式取值
arguments是一个类数组对象,只能在非箭头函数内部访问,可以通过Array.from(arguments)将arguments转化为数组,它和数组的区别是除了length和索引访问跟数组一样之外没有push和pop等方法。
Most helpful comment