非常简单,我在节点中看到使用coffeescript的以下语法,我从未在浏览器中看到过使用coffeescript。coffeescript语法{var}?
{foo} = app.locals.foo
我领导交给js2coffee,看看这是什么一样,但它似乎是在JS输出相同
foo = app.locals.foo
那么,什么是怎么回事?在这种情况下,{}
语法是什么意思?你为什么要用它?
非常简单,我在节点中看到使用coffeescript的以下语法,我从未在浏览器中看到过使用coffeescript。coffeescript语法{var}?
{foo} = app.locals.foo
我领导交给js2coffee,看看这是什么一样,但它似乎是在JS输出相同
foo = app.locals.foo
那么,什么是怎么回事?在这种情况下,{}
语法是什么意思?你为什么要用它?
解构赋值
从复杂的阵列使提取值和对象更方便,CoffeeScript的实现ECMAScript的和谐提出的解构赋值语法。当您将数组或对象字面量赋值给某个值时,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]
,你可以看到它在行动over here。
基本上,解构结构赋值的对象形式允许您以某种自然的方式解压缩对象。也许一个简单的例子可以帮助:
o =
a: 'b'
c: 'd'
e: 'f'
{a, e} = o
这对速记:
a = o.a
e = o.e
而另一demo。
您可以将解构结构赋值的左侧视为用于解开右手边的模式。
这是一个非常好的答案。但是我仍然不明白为什么我们在使用'{foo}'而不是'foo'时,它们在js中被编译为相同的东西。 – Fresheyeball 2013-03-13 21:37:49
@Fresheyeball:但是,正如Juhuna指出的那样,'foo = app.locals.foo'和'{foo} = app.locals.foo'不会编译成相同的东西。 'a = b'编译为'a = b',但'{a} = b'为'a = b.a'。 – 2013-03-13 22:24:22
明白了,谢谢。 – Fresheyeball 2013-03-13 22:51:24
如果我把'{foo} = app.locals.foo'放入js2coffee中,它表示JS输出是'var foo; foo = app.locals.foo.foo;' – JJJ 2013-03-13 19:48:00
@Juhana:看起来像['{a,b} = c'](http://coffeescript.org/#try:%7Ba%2C%20b%7D %20%3D%20c)可能会更有启发性。 – 2013-03-13 19:52:29
@ muistooshort我只是评论*“在js输出中似乎是相同的......”*因为对我来说它看起来并不相同。 – JJJ 2013-03-13 19:53:37