0

非常に単純に、ノードで coffeescript を使用した次の構文が表示されていますが、ブラウザーで coffeescript を使用したことはありません。

  {foo} = app.locals.foo

これが何をするのかを見るためにjs2coffeeに向かいましたが、js出力では同じように見えます

  foo = app.locals.foo

それで、ここで何が起こっているのですか?{}このコンテキストでの構文の意味は何ですか? なぜあなたはそれを使うのですか?

4

1 に答える 1

5

細かいマニュアルから:

代入の破壊

複雑な配列やオブジェクトからの値の抽出をより便利にするために、CoffeeScript は ECMAScript Harmony で提案されている分割代入構文を実装しています。配列またはオブジェクト リテラルを値に割り当てると、CoffeeScript は分解して両側を互いに照合し、右側の値を左側の変数に割り当てます。
[...]
構造化代入は、配列とオブジェクトのネストの任意の深さで使用でき、深くネストされたプロパティを引き出すのに役立ちます。

関連する例は次のとおりです。

futurists =
  sculptor: "Umberto Boccioni"
  painter:  "Vladimir Burliuk"
  poet:
    name:   "F.T. Marinetti"
    address: [
      "Via Roma 42R"
      "Bellagio, Italy 22021"
    ]

{poet: {name, address: [street, city]}} = futurists

それはこれの省略形です:

name   = futurists.poet.name
street = futurists.poet.address[0]
city   = futurists.poet.address[1]

ここで実際の動作を見ることができます。

基本的に、非構造化代入のオブジェクト形式を使用すると、ある程度自然な方法でオブジェクトをアンパックできます。おそらく、より簡単な例が役立つでしょう:

o =
    a: 'b'
    c: 'd'
    e: 'f'

{a, e} = o

これは次の省略形です。

a = o.a
e = o.e

そして別のデモ

構造化されていない割り当ての左側は、右側をアンパックするために使用されるパターンと考えることができます。

于 2013-03-13T19:50:59.703 に答える