这些代码中`{}`和`()`之间的区别是什么?

时间:2016-07-13 11:37:42

标签: javascript ecmascript-6 expression statements destructuring

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

'()'在第二句话?

为什么' {}'在它被认为是一个对象文字?

4 个答案:

答案 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;} ,只需在函数中的任何位置返回该函数。

只需查看已理解的代码。

&#13;
&#13;
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;
&#13;
&#13;