ES6解构对象,不用作函数参数时赋值的默认值?

ES6 destructuring object, default value on assignment when not used as a function parameter?

我有:

const fs = require('fs');

const packageConfig = JSON.parse(fs.readFileSync('./package.json'));
const { jspm: { configFile: jspmConfigFile }} = packageConfig;

packageConfigconfigFile 的值可能未定义。在那种情况下,我想将 jspmConfigFile 默认为 'config.js

是否可以在不创建扩展 packageConfig 对象的情况下执行此操作?

我意识到我可以做类似的事情:

const { jspm: { configFile: jspmConfigFile }} = _.extend({
    jspm: { config: 'config.js'}
}, packageConfig);

但是仅仅为了通过解构获得一个合理的默认值是相当混乱的。

我错过了什么?

对象解构中默认值的语法是:

const { jspm: { configFile: jspmConfigFile = 'config.js' }} = packageConfig;

但这还没有在 Firefox 中实现:https://bugzilla.mozilla.org/show_bug.cgi?id=932080

我不太确定 ES2015 解构是否真的能给你带来任何好处。归根结底,因为您只是在解构单个元素。您几乎是在编写一种奇特的方法:

const jspmConfigFile = packageConfig.jspm.configFile;

您可以在最里面的部分使用 = 'defaultValue' 分配一个默认值,但我不认为这实际上比它的 ES5 || 'default' 版本更好。

作为旁注,您可以 require JSON Node 中的文件:

const jspmConfigFile = require("./package.json").jspm.configFile || "default";

是我认为较短的单衬垫。您也可以 import 直接将它放在一个衬垫中:

import  { jspm: { configFile: jspmConfigFile = 'config.js' }} from "./package.json"

但老实说,我认为这还不够清楚。