解构声明bug的值

时间:2018-01-07 15:03:29

标签: javascript function destruction

我无法理解为什么在解构分配后,items道具不等于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"

3 个答案:

答案 0 :(得分:3)

在初始化的解构声明中:

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

语法意味着声明一个名为“w”的变量,其值应该初始化为“options”引用的对象中名为“items”的属性的值,或者如果没有这样的属性则返回到字符串“大猩猩”。

在您的情况下,然后,变量“w”被初始化为原始对象中“items”属性的值。

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

let w = "Gorilla";

答案 1 :(得分:1)

分析代码时,您可以使用以下三种技术:

  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]中的目标:

      

    此处的句法模式为source: target(或value: variable-alias)。

    { foo: bar }
    
  4. 合成是旧属性w的新目标items,默认值为'Gorilla'

答案 2 :(得分:0)

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

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

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

解决方案 - 问题是,我们正在覆盖全局对象。这就是为什么你有titile作为菜单,但选项对象没有titile属性。因此,当您为全局对象分配选项时, 它仍然有“piggi”的项目 加上你不能像这样分配对象,你必须在javascript中重新分配每个属性。 我希望你得到答案。