ES6解构,动态赋值

ES6 destructuring, dynamic assignment

本文关键字:赋值 动态 解构 ES6      更新时间:2023-09-26
let text, value;
if (typeof f == 'string') {
    text = value = f;
} else {
    let {
        text, value
    } = f;
}

这样做会创建两个新的变量(来自else),但是如果我这样写:

let text, value;
if (typeof f == 'string') {
    text = value = f;
} else {
    {
        text, value
    } = f;
}

我收到语法错误。这里最好的方法是什么?

作业周围需要括号:

let text, value;
if (typeof f == 'string') {
    text = value = f;
} else {
    ({                // ( at start
        text, value
    } = f);           // ) at end
}

(在 Babel 上实时复制。

您需要这些括号的原因与需要括号或类似原因以立即调用函数的原因相同:告诉解析器它应该期待一个表达式,而不是一个语句。没有parens,当它遇到{时,它认为这是一个块的开始。但与函数不同的是,它必须是parens,而不是前导一元+!等,如下所示:

let text, value;
if (typeof f == 'string') {
    text = value = f;
} else {
    +{                 // <== Doesn't work like it does with IIFEs
        text, value
    } = f;
}