我无法理解为什么在解构分配后,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"
答案 0 :(得分:3)
在初始化的解构声明中:
let { items:w = "Gorilla" } = options;
语法意味着声明一个名为“w”的变量,其值应该初始化为“options”引用的对象中名为“items”的属性的值,或者如果没有这样的属性则返回到字符串“大猩猩”。
在您的情况下,然后,变量“w”被初始化为原始对象中“items”属性的值。
如果您不想从源对象中获取值,请不要:
let w = "Gorilla";
答案 1 :(得分:1)
分析代码时,您可以使用以下三种技术:
{ foo, bar }
的
{ foo: foo, bar: bar}
{ foo = 42 }
是
{ foo: foo = 42 }
更改Object Property Assignment Pattern [You Don't Know JS: ES6 & Beyond, Chapter 2: Syntax]中的目标:
此处的句法模式为
source: target
(或value: variable-alias
)。
{ foo: bar }
合成是旧属性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中重新分配每个属性。 我希望你得到答案。