如果对象解构var前面没有关键字,为什么会抛出错误?
var
{a, b} = {a: 1, b: 2};
抛出 SyntaxError: expected expression, got '='
SyntaxError: expected expression, got '='
以下三个示例可以正常工作
var {a, b} = {a: 1, b: 2}; var [c, d] = [1, 2]; [e, f] = [1, 2];
额外的问题:为什么我们不需要var数组解构?
我在做类似的事情时遇到了问题
function () { var {a, b} = objectReturningFunction(); // Now a and b are local variables in the function, right? // So why can't I assign values to them? {a, b} = objectReturningFunction(); }
问题源于{...}运算符在JavaScript中具有多种含义。
{...}
当{出现在 Statement 的开头时,它将始终代表一个块,该块不能分配给该块。如果它稍后在 Statement中 作为Expression出现,则它将表示一个Object。
{
将var有助于使这种区别,因为它不能跟一个 声明 ,如将分组括号:
( {a, b} = objectReturningFunction() );
根据他们的文档:
注意:当使用不带声明的对象文字解构分配时,必须在赋值语句周围加上括号(…)。 {a,b} = {a:1,b:2}是无效的独立语法,因为左侧的{a,b}被认为是一个块,而不是对象文字。 但是,({a,b} = {a:1,b:2})是有效的,var {a,b} = {a:1,b:2}也有效 您的(…)表达式必须以分号开头,或者可以将其用于执行上一行的功能。
注意:当使用不带声明的对象文字解构分配时,必须在赋值语句周围加上括号(…)。
{a,b} = {a:1,b:2}是无效的独立语法,因为左侧的{a,b}被认为是一个块,而不是对象文字。
但是,({a,b} = {a:1,b:2})是有效的,var {a,b} = {a:1,b:2}也有效
您的(…)表达式必须以分号开头,或者可以将其用于执行上一行的功能。