如果前面没有var
关键字,为什么对象解构会抛出错误?
{a, b} = {a: 1, b: 2};
抛出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();
}
发布于 2014-12-10 02:38:41
该问题源于JavaScript中具有多种含义的{...}
运算符。
当{
出现在语句的开头时,它总是代表一个不能赋值的block。如果它稍后在语句中以表达式的形式出现,那么它将表示一个对象。
由于不能像grouping parenthesis一样后面跟语句,因此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}是有效的
你的( ... )表达式的前面必须有分号,或者它可以用来执行上一行的函数。
发布于 2019-05-10 06:57:58
如果您编写的Javascript没有使用分号,那么“assignment without assignment”语法应该在前面加上一个分号,这样才能正常工作
let a, b
;({a, b} = objectReturningFunction()) // <-- note the preceding ;
我只想强调这一点,因为它抓住了我,并希望可以节省其他人一些时间来弄清楚为什么它不工作和/或产生奇怪的结果与代码格式化程序,如prettier
。
事实上,它实际上就在公认的答案中(引用的文档的最后一行),但很容易遗漏,特别是在没有看到示例的情况下!
发布于 2020-07-11 20:35:09
这里有另一种方法:
let {} = {a, b} = objectReturningFunction()
优点:
缺点:
!(){...}()
IIFE.https://stackoverflow.com/questions/27386234
复制相似问题