5

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

括弧式だけを含めることができます:*ブロックは、* *文ですが、オブジェクトリテラルまたは変数の割り当ては*式です。 – gcampbell

答えて

2

ステートメントは、JavaScriptで括弧で始めることはできません。 Pitfalls of destructuring

また、次の式が可能です:

"",{a, b} = {a:1, b:2}; 

コードので、文はブレースで始まっていないということだけが重要ですブロックは1で始まります。

+0

**ステートメントは中括弧で始めることはできません** - これは正しくありません。たとえば、{}(a = 'test')のように実行することができ、完全に動作します。 –

+0

はい。今はOKです。 –

+0

Andriiのコメントは間違っています。 '{}({a、b} = {a:1、b:2});'は空のオブジェクトリテラルまたは空のブロックとして解釈されます(それぞれが後に代入式が続きます)。 ASI(Automatic Semicolon Insertion)のため、この行は '{};に変換されます。 ({a、b} = {a:1、b:2}); '。それでおしまい。オブジェクトリテラルも空のブロック自体もステートメントではないので、コードは有効です。 – ftor

1

最初のブロックはブロックに値を割り当てようとしますが、これは正しくありません。 目は

{}({a, b} = {a:1, b:2}); 

だからここにあなたがプロパティのブロックを供給し、それらに値を割り当て、コンストラクタを呼び出していることと同じです。

1

私は単に右隣にはリンクしたサンプルにhilighted説明を引用することがあります。

私はそれはかなり明確だと思う

(..)代入文の周りに使用した場合の構文を必要とします宣言のないオブジェクトリテラルの構造化代入。

{a, b} = {a:1, b:2}は有効なスタンドアロン構文ではありません。左側の{a, b}はブロックとみなされ、オブジェクトリテラルではありません。私たちは、配列、オブジェクト、文字列のような任意のリテラルに任意の値を割り当てることはできませんvar {a, b} = {a:1, b:2}

0

あるよう

しかし、({a, b} = {a:1, b:2})は、有効です。

例: [a] = [1];

{a} = {1};

"a" = "b";

しかし、我々は、カンマ区切り

を使用して値を割り当てることができ、[A]、{A} = {1}。

出力:

[A] - [1]

{A} - {1}

注:

1.Objectリテラル初期化時に最初にはいけません。

2.In文字列リテラルは決して値を保存しません。

() - あなたは{}に与えられたものは何でもqualto リターン声明

あり、それが自動的に実行されます。

{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}

関連する問題