ES6解构,动态分配

ben*_*e89 6 javascript ecmascript-6

let text, value;
if (typeof f == 'string') {
    text = value = f;
} else {
    let {
        text, value
    } = f;
}
Run Code Online (Sandbox Code Playgroud)

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

let text, value;
if (typeof f == 'string') {
    text = value = f;
} else {
    {
        text, value
    } = f;
}
Run Code Online (Sandbox Code Playgroud)

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

T.J*_*der 7

你需要在任务周围做一些事情:

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

(巴贝尔的现场拷贝.)

你需要那些parens,原因与你需要parens或类似的东西相同,以便立即调用一个函数:告诉解析器它应该期望一个表达式,而不是一个语句.没有parens,遇到它时{,它认为这是块的开始.但是,与使用功能,它必须是括号,而不是一个领先的一元+,!这样的:

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