This question already has answers here:
object destructuring without var

(3个答案)


5年前关闭。



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

这样做会创建两个新的var(来自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
}

(Live copy on Babel。)

出于相同的原因,您需要这些parens you need parens or similar to immediately invoke a function:告诉解析器它应该使用表达式,而不是语句。没有parens,当它遇到{时,它认为这是一个块的开始。但是与函数不同的是,它必须是parens,而不是前导的一元+!等。like this:
let text, value;
if (typeof f == 'string') {
    text = value = f;
} else {
    +{                 // <== Doesn't work like it does with IIFEs
        text, value
    } = f;
}

10-02 08:48