coffeescript语法{var}?

Fre*_*all 0 node.js coffeescript

很简单,我在节点中使用coffeescript看到以下语法,我从未在浏览器中看到过使用coffeescript.

  {foo} = app.locals.foo
Run Code Online (Sandbox Code Playgroud)

我前往js2coffee看看它做了什么,但它在js输出中似乎是相同的

  foo = app.locals.foo
Run Code Online (Sandbox Code Playgroud)

那么这里发生了什么?{}语法在这种情况下意味着什么?你为什么要用它?

mu *_*ort 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
Run Code Online (Sandbox Code Playgroud)

这是对此的简写:

name   = futurists.poet.name
street = futurists.poet.address[0]
city   = futurists.poet.address[1]
Run Code Online (Sandbox Code Playgroud)

你可以在这里看到它.

基本上,析构赋值的对象形式允许您以一种自然的方式解包对象.也许一个更简单的例子会有所帮助:

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

{a, e} = o
Run Code Online (Sandbox Code Playgroud)

这是以下的简写:

a = o.a
e = o.e
Run Code Online (Sandbox Code Playgroud)

另一个演示.

您可以将析构化赋值的左侧视为用于解压缩右侧的模式.

  • @Fresheyeball:但是,正如Juhuna所说,`foo = app.locals.foo`和`{foo} = app.locals.foo`不会编译成相同的东西.`a = b`编译成'a = b`但是`{a} = b`是'a = ba`. (2认同)