2013-10-12 91 views
0

在CoffeeScript中,我聲明瞭兩個不同的匿名對象數組,其中一個用單個項目計算數組,從而丟失數據,而另一個則有多個項目,因爲它應該如此。匿名對象數組丟失成員

這裏發生了什麼,爲什麼users變量只包含一個項目,而names變量包含多個項目?嘗試在此粘貼:http://larryng.github.io/coffeescript-repl/並參閱。

users = [ 
    username: "Dean" 
    email: "[email protected]" 
    password: "spades" 
    , 
    username: "Jess" 
    email: "[email protected]" 
    password: "spades" 
    , 
    username: "Miles" 
    email: "[email protected]" 
    password: "spades" 
] 

這一個不會崩潰(用任何一種引號)。讓人傷腦筋。

names = [ 
    nameA1: 'valueA1' 
    nameA2: 'valueA2' 
    nameA3: 'valueA3' 
    , 
    nameB1: 'valueB1' 
    nameB2: 'valueB2' 
    nameB3: 'valueB3' 
] 
+1

我寧願使用'{}'而不是依賴''的確切縮進。如果Coffeescript的功能不會使我的代碼更具可讀性(或可寫),我寧願不使用它。 – hpaulj

回答

2

第一個變成this JavaScript

var users; 
users = [ 
    { 
    username: "Dean", 
    email: "[email protected]", 
    password: "spades", 
    username: "Jess", 
    email: "[email protected]", 
    password: "spades", 
    username: "Miles", 
    email: "[email protected]", 
    password: "spades" 
    } 
]; 

所以CoffeeScript中沒有看到您的逗號作爲數組裏面分離對象的,它看到他們更多的是這樣的:

users = [ 
    username: "Dean" 
    email: "[email protected]" 
    password: "spades", 
    # ----------------^ 

,它們被認爲是一個可選的逗號,而不是被遺漏。

如果不縮進逗號:

users = [ 
    username: "Dean" 
    email: "[email protected]" 
    password: "spades" 
, 
    username: "Jess" 
    email: "[email protected]" 
    password: "spades" 
, 
    username: "Miles" 
    email: "[email protected]" 
    password: "spades" 
] 

那麼他們就會被看作是分隔符爲您在陣列中所需的三個對象。或者,把可選的括號中,使結構非常明確:

users = [{ 
    username: "Dean" 
    email: "[email protected]" 
    password: "spades" 
    }, { 
    username: "Jess" 
    email: "[email protected]" 
    password: "spades" 
    }, { 
    username: "Miles" 
    email: "[email protected]" 
    password: "spades" 
}] 

或者一個漂亮的網格(我最喜歡這樣的小物件):

users = [ 
    { username: "Dean", email: "[email protected]", password: "spades" }, 
    { username: "Jess", email: "[email protected]", password: "spades" }, 
    { username: "Miles", email: "[email protected]", password: "spades" } 
] 

只因爲出現(有時)可選並不意味着你應該永遠不要離開它。 CoffeeScript中所有可選的東西都引入了歧義,CoffeeScript將嘗試根據它認爲合適的方式解決這種模糊性; CoffeeScript還使用空格/縮進來表示其結構,因此縮進中的一個字符更改可以更改您的代碼結構。