JavaScript对象解构和别名

前端之家收集整理的这篇文章主要介绍了JavaScript对象解构和别名前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
有没有办法在 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_Z} = process.env);

在哪里生产

({ENV_VAR_X,ENV_VAR_Z} = process.env)

像所有其他任务一样,定义为对RHS的评估,即rHS,即process.env.

因此,您的代码相当于

const {ENV_VAR_X,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}.吧=== foo.

您正在尝试做的事已在SO上和ES讨论组中多次讨论过.底线是没有办法做到这一点.你所能做的就是:

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

换句话说,没有办法“从一个对象解构成一个对象”,或“从一个对象中挑选一个对象”.您只能将对象解构为变量.

你可以回归过去的老式方式:

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

我知道这很可怕.

您可以使用下划线的选择功能或编写自己的功能,但这需要您说

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

这只是稍微不那么可怕了.

我们为ES7提出了“rest properties” and “spread properties”,但它们似乎对我们没有帮助.

我们需要的是一种将属性选择到另一个对象的新语法.已经提出了各种各样的建议,其中没有一个获得太多牵引力.一个是“扩展点符号”,它允许将一个卷曲括号的结构放在一个点之后.在你的情况下,你会写

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

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

原文链接:https://www.f2er.com/js/240746.html

猜你在找的JavaScript相关文章