【发布时间】:2018-06-30 07:59:18
【问题描述】:
在 ES6 JS 中解构对象时,您可以使用 { a, b } 语法从该对象创建新变量,分别称为 a 和 b。但是,据我所知,没有办法让对象的键自动创建具有这些名称的本地范围变量。在下面的示例中,我希望能够使用const {} = args; 的假设伪代码,它会自动生成const a 和const b。
const bar = { a: 'apple', b: 'ball' };
const foo = (args) => {
const { a, b } = args;
console.log(a, b); // Great!
const {} = args; // I am aware this isn't valid syntax...
console.log(a, b) // Because of course, it doesn't work.
};
foo(bar);
原因纯粹是因为,在这个 MCVE 之外,我实际上使用了一个带有几十个键的 massive 对象,并且我想将其中的某些值传递到承诺链。我当然可以使用{ a: args.a, b: args.b },但我正在尝试找到最短、最干净的方法。我想我真正想要的是 PHP 的 extract()-like 语法,但在 ES6 JS 中。
这可能吗?
Ps,我知道如果对象的内容不受信任,这可能会被视为一个非常糟糕的主意。
Pps。我正在测试的环境是 Node 7.9.0
【问题讨论】:
-
由于各种原因,这不是一个好主意。其中之一是用不需要的变量污染命名空间和地址空间
-
我知道为什么这是一个坏主意,我在我的小字中指出了这一点。
-
确实,但我目前的选项非常冗长,我宁愿不必在每次想对它们做某事时定义我感兴趣的 20 个左右的属性!这会让 linter 感到难过,因为它的语法完全不正确:P
-
你能把整个巨大的物体沿着承诺链传递吗?
-
没有
with是不可能的,但这是潜在的 XY 问题。如果您的目标是将某些值从其中传递到承诺链的下一部分,为什么您需要将它们设为局部变量。可能有适合您的情况的解决方案,可能是pick或其他。我建议根据情况重新提问。
标签: javascript ecmascript-6 object-destructuring