Destructuring_assignment#Assignment_without_declaration
它说:
左侧的{a,b}被视为块而不是对象文字。
var a, b;
{a, b} = {a:1, b:2};//Syntax Error!
({a, b} = {a:1, b:2}); // it works
'()'在第二句话?
为什么' {}'在它被认为是一个对象文字?
答案 0 :(得分:2)
语句不能以Javascript中的大括号开头: Pitfalls of destructuring
或者,可以使用以下表达式:
"",{a, b} = {a:1, b:2};
重要的是语句不以大括号开头,因为代码块以1开头。
答案 1 :(得分:2)
第一个尝试为块分配值,这是不对的。 第二个相当于
{}({a, b} = {a:1, b:2});
所以在这里你要调用一个构造函数,提供属性块并为它们赋值。
答案 2 :(得分:1)
我可以简单地引用你所链接的样本旁边的明确解释:
我认为很清楚
当使用没有声明的对象文字解构赋值时,赋值语句周围的(..)是必需的语法。
{a, b} = {a:1, b:2}
不是有效的独立语法,因为左侧的{a, b}
被视为块而不是对象文字。但是,
一样有效({a, b} = {a:1, b:2})
和var {a, b} = {a:1, b:2}
答案 3 :(得分:0)
我们无法将任何值分配给任何文字,如数组,对象,字符串。
例如: [a] = [1];
{a} = {1};
"" =" b&#34 ;;
但我们可以使用逗号分隔符
指定值[a],{a} = {a:1};
<强>输出:强>
[a] - [1]
{a} - {a:1}
注意:
1.对象文字不应该是初始化中的第一个。
2.在字符串文字中永远不存储任何值。
() - 属于返回声明
无论您在 {} 中提供什么,它都会自动执行;
要检查代码 {return;} ,只需在函数中的任何位置返回该函数。
只需查看已理解的代码。
var a =5;b=6;
console.log(JSON.stringify({a,b}));
//Output: {"a":5,"b":6}
[a,b],{a,b} = {"a":1, "b":2};
console.log(JSON.stringify([a,b]));
console.log(JSON.stringify({a,b}));
//Output:
//[1,2]
//{"a":1,"b":2}
var name = (function(){return "lotus"});
console.log(name);
//Output: function(){return "lotus"}
name = (function(){return "lotus"})();
console.log(name);
//Output: lotus
name = ({a, b} = {a:3, b:4});
console.log(JSON.stringify(name));
//Output: {"a":3,"b":4}
&#13;