具有值的解构声明错误
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"
当您分析代码时,您会发现三种技术在这里起作用:
-
{ 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]中的目标更改:
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 中的每个 属性。
希望你能得到答案。
我不明白为什么在解构赋值后,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"
当您分析代码时,您会发现三种技术在这里起作用:
-
{ 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]中的目标更改:
The syntactic pattern here is
source: target
(orvalue: 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 中的每个 属性。 希望你能得到答案。