Javascript ES6解构、动态分配
这样做会创建两个新的变量(来自Javascript ES6解构、动态分配,javascript,ecmascript-6,Javascript,Ecmascript 6,这样做会创建两个新的变量(来自else),但是如果我这样写的话: let text, value; if (typeof f == 'string') { text = value = f; } else { let { text, value } = f; } 我收到一个语法错误。这里最好的方法是什么?你需要在作业周围准备好: let text, value; if (typeof f == 'string') { text = value =
else
),但是如果我这样写的话:
let text, value;
if (typeof f == 'string') {
text = value = f;
} else {
let {
text, value
} = f;
}
我收到一个语法错误。这里最好的方法是什么?你需要在作业周围准备好:
let text, value;
if (typeof f == 'string') {
text = value = f;
} else {
{
text, value
} = f;
}
()
出于同样的原因,您需要这些参数:告诉解析器它应该使用表达式,而不是语句。如果没有parens,当它遇到{
时,它认为这是块的开始。但与函数不同,它必须是parens,而不是前导一元数+
,!
,等等:
let文本,值;
if(typeof f=='string'){
文本=值=f;
}否则{
+{//或者,const{text,value}=(typeof f=='string')?{text:f,value:f}:f;
回答得很好。次要说明:括号只需要围绕大括号;赋值本身可以在外部。@Zirak:不,括号需要围绕整个赋值表达式;否则是错误:。它们甚至有一个特定的消息:“您试图分配给一个带括号的表达式,例如,使用({a}=0
而不是({a}=0)
”,如果您仔细想想,这一点也不奇怪:由于paren仅在{}
周围,它看起来像paren中的对象初始值设定项(因为在ES6中,您可以使用这种速记形式)。我不知道巴贝尔。谢谢。@RoyiNamir::-)从上面的链接看,这不是很明显,但这只是REPL工具。主要是一个非常强大的传输工具。你可以使用ES6的大部分,它会将其传输到ES5。当然,传输工具可能会降低效率。。。
let text, value;
if (typeof f == 'string') {
text = value = f;
} else {
({ // ( at start
text, value
} = f); // ) at end
}
let text, value;
if (typeof f == 'string') {
text = value = f;
} else {
+{ // <== Doesn't work like it does with IIFEs
text, value
} = f;
}