具有值的解构声明错误

Destructuring declaration bug with the value

我不明白为什么在解构赋值后,items prop 不等于 Gorilla

删除原始对象选项中的主要道具items: "Piggi"后使用。我不明白为什么...

    'use strict';
    
    let options = {
      size: 100,
      items: "Piggi"
    }
    
    let { title="Menu", items:w="Gorilla", size } = options;
    
    let a = title;
    let b = w;
    console.log(a + " - " + b);  // must be "Menu - Gorilla"

当您分析代码时,您会发现三种技术在这里起作用:

  1. short hand properties

    { foo, bar }
    

    { foo: foo, bar: bar}
    
  2. default values

    { foo = 42 }
    

    { foo: foo = 42 }
    
  3. Object Property Assignment Pattern [You Don't Know JS: ES6 & Beyond, Chapter 2: Syntax]中的目标更改:

    The syntactic pattern here is source: target (or value: variable-alias).

    { foo: bar }
    

合成是旧 属性 items 的新目标 w,默认值为 'Gorilla'

在此处初始化的解构声明中:

let { items:w = "Gorilla" } = options;

语法意思是声明一个名为"w"的变量,其值应初始化为"options"引用的对象中名为"items"的属性的值, 或者如果没有这样的 属性 则到字符串 "Gorilla".

在你的情况下,变量 "w" 被初始化为原始对象中 "items" 属性 的值。

如果您不想从源对象中获取值,则不要:

let w = "Gorilla";
let options = {
  size: 100,
  items: "Piggi"
}

let { title="Menu", items:w="Gorilla", size } = options;

let a = title;
let b = w;
console.log(a + " - " + b);

解决方案- 问题是,我们正在覆盖全局 object。这就是为什么您将标题设置为菜单,但选项 object 没有标题 属性。因此,当您使用选项分配全局 object 时, 它仍然有项目 "piggi" 另外你不能像这样分配 object,你必须重新分配 javascript 中的每个 属性。 希望你能得到答案。