2013-03-13 106 views
0

非常簡單,我在節點中看到使用coffeescript的以下語法,我從未在瀏覽器中看到過使用coffeescript。coffeescript語法{var}?

{foo} = app.locals.foo 

我領導交給js2coffee,看看這是什麼一樣,但它似乎是在JS輸出相同

foo = app.locals.foo 

那麼,什麼是怎麼回事?在這種情況下,{}語法是什麼意思?你爲什麼要用它?

+0

如果我把'{foo} = app.locals.foo'放入js2coffee中,它表示JS輸出是'var foo; foo = app.locals.foo.foo;' – JJJ 2013-03-13 19:48:00

+0

@Juhana:看起來像['{a,b} = c'](http://coffeescript.org/#try:%7Ba%2C%20b%7D %20%3D%20c)可能會更有啓發性。 – 2013-03-13 19:52:29

+0

@ muistooshort我只是評論*「在js輸出中似乎是相同的......」*因爲對我來說它看起來並不相同。 – JJJ 2013-03-13 19:53:37

回答

5

fine manual

解構賦值

從複雜的陣列使提取值和對象更方便,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

您可以將解構結構賦值的左側視爲用於解開右手邊的模式。

+0

這是一個非常好的答案。但是我仍然不明白爲什麼我們在使用'{foo}'而不是'foo'時,它們在js中被編譯爲相同的東西。 – Fresheyeball 2013-03-13 21:37:49

+2

@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

+0

明白了,謝謝。 – Fresheyeball 2013-03-13 22:51:24