非常簡單,我在節點中看到使用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