Fe-interview: [js] 第27天 说说你对arguments的理解,它是数组吗?

Created on 12 May 2019  ·  16Comments  ·  Source: haizlin/fe-interview

第27天 说说你对arguments的理解,它是数组吗?

js

Most helpful comment

        1.实参列表,是类数组,不是数组
        2.是传入参数的一个镜像(浅拷贝)
        3.arguments.callee是函数本身, 严格模式禁用arguments.callee

All 16 comments

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 不是数组,是类数组。
类数组 转 数组的方法有

  • [...arguments]
  • Array.from(arguments)
  • Array.prototype.slice.call(arguments)

用来获取函数参数 [].slice.call(arguments)

es6 显式提供 function foo(...args){}

arguments.callee 在匿名函数中指向这个函数

  • arguments
    不是数组,但是它有数组类似的length属性 可以通过 Arrary.from(arguments) 转化为数组。也可以通过Arrary.prototype.foEach.call(argunment),
  • Arrary.from
    能够转化类数组对象成为数组

严格模式禁用了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
  • 是一个类数组,有下标有length
  • arguments.callee指向函数本身,但是严格模式下禁用此属性
  • 转换为数组的方法

[...arguments]
Array.from(arguments)
[].slice.call(arguments)

arguments并不是一个数组, 但是它有length属性以及可以以下标的形式取值

arguments是一个类数组对象,只能在非箭头函数内部访问,可以通过Array.from(arguments)将arguments转化为数组,它和数组的区别是除了length和索引访问跟数组一样之外没有push和pop等方法。

Was this page helpful?
0 / 5 - 0 ratings