Skip to content

[js] 第27天 说说你对arguments的理解,它是数组吗? #96

Open
@haizhilin2013

Description

@haizhilin2013
Collaborator

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

Activity

grepug

grepug commented on May 13, 2019

@grepug

object like array

Amour1688

Amour1688 commented on May 13, 2019

@Amour1688

arguments是一个对象。

js不能像java一样实现重载,arguments对象可以模拟重载。

js中每个函数都会有arguments这个实例,它引用着函数的实参,可以用数组下标的方式"[]"引用arguments的元素。arguments.length为函数实参个数,arguments.callee引用函数自身。

arguments他的特性和使用方法

特性:

1.arguments对象和Function是分不开的。

2.因为arguments这个对象不能显式创建。

3.arguments对象只有函数开始时才可用。

使用方法:

虽然arguments对象并不是一个数组,但是访问单个参数的方式与访问数组元素的方式相同

例如:

arguments[0],arguments[1]...

buzhanhua

buzhanhua commented on May 13, 2019

@buzhanhua

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

tiu5

tiu5 commented on May 15, 2019

@tiu5

arguments 不是数组,是类数组。
类数组 转 数组的方法有

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

tzjoke commented on May 28, 2019

@tzjoke

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

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

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

myprelude

myprelude commented on Jun 13, 2019

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

DarthVaderrr commented on Jul 4, 2019

@DarthVaderrr

严格模式禁用了arguments.callee

getanimation

getanimation commented on Jul 17, 2019

@getanimation

arguments是个伪数组,它有数组的length以及下标取值;但是它不能用数组的一些方法,例如:Array.push()之类的

wyx2014

wyx2014 commented on Jul 24, 2019

@wyx2014

var list = document.getElementById('test-list'); var listchild = list.children;
那这种ul标签下li获取出来的listchild也是类数组了呗,难怪无法直接foreach

Konata9

Konata9 commented on Aug 12, 2019

@Konata9

arguments 并不是数组,是一个 array like 对象,它有 length 这个属性。通常情况下,为了使用方便我们会把 arguments 转成数组,方法有下面几种。即使不转为数组,可以使用下标访问。如 arguments[0]

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

一般情况下不会对 arguments 进行操作。但在实现一些低级或者通用功能时候会使用到,如实现一个泛柯理化的函数,或者根据参数的数量执行不同的方法(类似函数的重载)。

seho-dev

seho-dev commented on Aug 14, 2019

@seho-dev

类数组对象(js权威指南)记得第一次啃书就看的这一节,所以这个名词记得非常清楚

他是一个对象,是类数组对象(js权威指南),他有着和数组几乎一样的api,比如length,自增key,增加一个key自动增加length,使之可以用arg[0]来访问数据
可以通过arguments来访问,传入的参数,arg[0]
如果更改了arguments的值的话,那么传入的参数也会被改变,因为前者是后者的一个引用;

seho-dev

seho-dev commented on Aug 14, 2019

@seho-dev

var list = document.getElementById('test-list'); var listchild = list.children;
那这种ul标签下li获取出来的listchild也是类数组了呗,难怪无法直接foreach

是的,目前好像只有这2个情况会产生类数组对象

zhangkuibao

zhangkuibao commented on Sep 9, 2019

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

blueRoach commented on Jun 23, 2020

@blueRoach
  • 是一个类数组,有下标有length
  • arguments.callee指向函数本身,但是严格模式下禁用此属性
  • 转换为数组的方法

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

9 remaining items

Loading
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    jsJavaScript

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

      Development

      No branches or pull requests

        Participants

        @smile-2008@haizhilin2013@Konata9@never123450@grepug

        Issue actions

          [js] 第27天 说说你对arguments的理解,它是数组吗? · Issue #96 · haizlin/fe-interview