代码之家  ›  专栏  ›  技术社区  ›  Géry Ogam

用作数组析构函数模式的rest属性的对象析构函数图案代表什么?

  •  -5
  • Géry Ogam  · 技术社区  · 3 年前

    这个 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]
    

    那些是什么 pop push 函数以及如何使用它们?

    > 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>)
    
    1 回复  |  直到 3 年前
        1
  •  0
  •   Géry Ogam    3 年前

    使用常规销毁,您可以执行以下操作:

    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 将是一个包含第三个数字的数组。由于不存在第三个数字, 休息 将是一个空数组。

    push pop 是可以从数组对象中析取的函数。这就解释了为什么 const [a, b, ...{ pop, push }] = [1, 2]; 将提取 流行音乐 函数从排列语法产生的空数组中提取。

    由于您没有对spread语法创建的数组的引用,因此这些方法在您给出的示例中不是很有用。正如@pilchard所指出的,要调用这两种方法中的任何一种,都需要使用 call apply 因此 this 将被设置为特定的数组实例。

    一个更有用的例子是获取数组中其他元素(未单独销毁)的计数:

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