gpt4 book ai didi

JavaScript 对象解构和别名

转载 作者:数据小太阳 更新时间:2023-10-29 04:34:38 29 4
gpt4 key购买 nike

有没有办法在 JavaScript 中解构对象并为本地解构对象起别名?

类似于:

const env = {ENV_VAR_X, ENV_VAR_Y, ENV_VAR_Z} = process.env;

...并使 env 成为包含这些选定环境变量的本地常量。 (我知道我的示例不适用于 babel)

{
ENV_VAR_X: "s867c7dsj4lal7",
ENV_VAR_Y: "hd73m20s-a=snf77f",
ENV_VAR_Z: "production"
}

有没有办法实现这种别名?

附带说明一下,我使用 babel 作为我的转译器,然后使用节点运行脚本,以便我可以利用更多 ECMAScript 6 功能。

最佳答案

根据我对规范的阅读,这应该是可解析的,但这并不意味着您的想法。它将被从右到左解析为

const env = ({ENV_VAR_X, ENV_VAR_Y, ENV_VAR_Z} = process.env);

产地

({ENV_VAR_X, ENV_VAR_Y, ENV_VAR_Z} = process.env)

与所有其他分配一样,被定义为对 RHS 求值,即 process.env

因此,您的代码等同于

const {ENV_VAR_X, ENV_VAR_Y, ENV_VAR_Z} = process.env;
const env = process.env;

验证这一点很容易:

const foo = {a: 1, b: 2};
const bar = {a} = foo;

导致一个新常量 a 被声明为值 1,如您所料。但是,bar 的值不是“解构对象的别名”,它是{a: 1};它与 foo 相同,即 {a: 1, b: 2}bar === foo.


您尝试做的事情已经在 SO 和 ES 讨论组中讨论过很多次。最重要的是,没有办法做到这一点。你所能做的就是:

const {ENV_VAR_X, ENV_VAR_Y, ENV_VAR_Z} = process.env;
const env = {ENV_VAR_X, ENV_VAR_Y, ENV_VAR_Z};

换句话说,没有办法“从对象解构为对象”,或者“从对象中挑选到对象”。您只能从对象解构为变量。

你可以回到老式的方式:

const env = {ENV_VAR_X: process.env.ENV_VAR_X, ...

我知道这很可怕。

您可以使用 underscore 中的 pick 函数或编写您自己的函数,但这需要您说明

const env = _.pick(process.env, 'ENV_VAR_X', "ENV_VAR_Y', 'ENV_VAR_Z');

只是稍微没那么可怕。

我们有"rest properties" and "spread properties"为 ES7 提出建议,但它们似乎对我们没有帮助。


我们需要的是一种新语法,用于将属性选取到另一个对象中。为此提出了各种建议,但没有一个获得很大的关注。一种是“扩展点表示法”,它允许将花括号中的结构放在点之后。在你的情况下,你会写

const env = process.env.{ENV_VAR_X, ENV_VAR_Y, ENV_VAR_Z};
^^

您可以找到有关此提案的更多信息 here .

关于JavaScript 对象解构和别名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35531775/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com