对象转数组_剩余参数和arguments对象

come on 4625ce4d64f9a0c0e14f7188a7d591fd.gif 伸出手指戳戳上方关注我哦

一、arguments对象

01、函数里的arguments

对于一个普通函数fn,函数内部内置了一个 arguments 对象,当用于接收实参的形参个数不确定时,可以用arguments接收。

function fn(){    console.log(arguments)     // [1, 2, 3, callee: ƒ, Symbol(Symbol.iterator): ƒ]}fn(1,2,3)

arguments展示形式是一个伪数组。

02、什么是伪数组

伪数组也叫类数组,并不是真正意义上的数组,是一组具有数组的length属性以及下标,但是不具有数组的push、pop、reverse等方法的对象。

  • 01. 具有length属性和下标:

function fn(){    console.log(arguments.length) // 3    console.log(arguments[1]) // 2}fn(1,2,3)
  • 02. 可以遍历

function fn() {    for (var i = 0; i < arguments.length; i++) {        console.log(arguments[i]) // 1 2 3    }}fn(1, 2, 3)
  • 03. 不具有数组的 push , pop等方法

function fn() {    arguments.push(4)     // Uncaught TypeError: arguments.push is not a function}fn(1, 2, 3)

03、箭头函数里的arguments

箭头函数里不能使用arguments获取参数列表。

var fn = (a,b,c) => {    console.log(arguments) // 并不是参数列表}fn(1,2,3)
但是可以使用剩余参数获取参数列表。

二、剩余参数

01、简介

剩余参数语法允许我们将一个不定数量的参数表示为一个数组。

function fn(...arguments) {    console.log(arguments) // [1,2,3] } fn(1, 2, 3)

02、可以与扩展运算符一起使用

function fn(a, ...arguments) {    console.log(a) // a    console.log(arguments) // [2,3] } fn(1, 2, 3)

03、剩余参数是真正的 Array

具有伪数组不具有的pop、push、sort方法等。

function fn(...arguments) {    return arguments.sort()}console.log(fn(3, 2, 1)); //  [1, 2, 3]

三、伪数组转真正的数组

01、Array.prototype.slice.call()

function fn() {    var args = Array.prototype.slice.call(arguments);    args.push(4)    return args}console.log(fn(1,2,3)); // [1,2,3,4]

02、Array.from()

function fn() {    var args = Array.from(arguments);    args.push(4)    return args}console.log(fn(1,2,3)); // [1,2,3,4]

03、结构赋值

function fn() {    let arr = [...arguments]    console.log(arr)}console.log(fn(1, 2, 3)); //  [1, 2, 3]

四、剩余参数和arguments对象之间的区别

1. 剩余参数只包含那些没有对应形参的实参,而 arguments 对象包含了传给函数的所有实参。

2. 剩余参数是真正的数组,arguments对象不是一个真正的数组。

3. arguments对象还有一些附加的属性。

arguments对象的属性:

callee: ƒ fn()length: 3Symbol(Symbol.iterator): ƒ values()arguments: (...)caller: (...)length: 0name: "values"__proto__: ƒ ()[[Scopes]]: Scopes[0]__proto__: Object
References

书名:从0到1:JavaScript快速上手 作者:莫振杰

https://developer.mozilla.org/zhCN/docs/Web/JavaScript/Reference/Functions/Rest_parameters

https://developer.mozilla.org/zhCN/docs/Web/JavaScript/Reference/Functions/arguments

 ◆ ◆

a014c3e2d6f624d53b04f1c86bf33f1a.png

sdfd

Readings

      根据某一天空中飞机的数量,他们就可以预测当晚空管员养育子女的水平。飞机越多,为人父母的水平就会越低。用一个世俗一点的比喻来讲就是,同样一位空管员在轻松地工作了一天之后,就会表现出“中产阶级”的样子;而在辛苦工作了一天后,就会落入“贫困人民”的队伍。

      而当你的带宽减少时,这些事情的难度就会加倍。在面对孩子的那一刻,你没有办法表现得耐心,做不到你深知的正确之事,因为你的大脑此时根本就不够自由。这也就是空管员在一天的繁忙工作之后,回到家里就再也没有办法做一位称职的家长的原因。

-- [美]塞德希尔·穆来纳森、埃尔德·沙菲尔《稀缺》

END

下一篇:7种不同函数内的this指向问题

推荐阅读:

1. 高阶函数(Higher-order function)

2. 闭包(closure)

35087c09e63c7c7e986c9f7042d7f998.png

关注有惊喜

ce2f6324e5c486a678825454d468a84c.png

f468065363d8a2511c1b1972ef65b247.gif
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值