javascript 一个对象解构模式作为数组解构模式的rest属性代表什么?

vsdwdz23  于 2023-04-19  发布在  Java
关注(0)|答案(1)|浏览(115)

MDN Web Docs有这样的例子:

使用绑定模式作为rest属性

数组解构赋值的rest属性可以是另一个数组或对象绑定模式。这允许你同时解包数组的属性和索引。

const [a, b, ...{ pop, push }] = [1, 2];
console.log(a, b); // 1 2
console.log(pop, push); // [Function pop] [Function push]

什么是poppush函数以及如何使用它们?

> pop()
Uncaught TypeError: Cannot convert undefined or null to object
    at pop (<anonymous>)
> push(3)
Uncaught TypeError: Cannot convert undefined or null to object
    at push (<anonymous>)
q8l4jmvw

q8l4jmvw1#

使用常规解构,您可以执行以下操作:

const obj = {a:3, b:4}
const {a} = obj // equivalent to const a = obj.a

下面是一个例子:

const [a, b, ...rest] = [1, 2];
console.log(a, b, rest); // 1 2 []
const {push, pop} = rest;
console.log(push, pop);

rest将是一个包含第三个数字的数组。由于没有第三个数字,rest将是一个空数组。
pushpop是可以从数组对象中解构出来的函数。这解释了为什么const [a, b, ...{ pop, push }] = [1, 2];会从spread语法产生的空数组中提取poppush函数。
因为你没有spread语法创建的数组的引用,所以这些方法在你给出的例子中不是很有用。正如@pilchard指出的,要调用这些方法中的任何一个,你需要使用callapply,这样this将被设置为特定的数组示例。
一个更有用的例子是获取数组中其他元素的计数(没有单独解构):

const [a, b, ...{length}] = [1, 2, 3, 4, 5]

console.log(length)

相关问题