2013-10-17 45 views
4

我有一個使用問號運算符的CoffeeScript片段。我需要翻譯成Javascript語法。片段如下所示。將CoffeeScript問號語法翻譯成Javascript

closeItem: (item) -> 
    item.close() if item?.close and not item.isClosed 

我試圖運行到CoffeeScript網站,結果如下。

({ 
    closeItem: function(item) { 
    if ((item != null ? item.close : void 0) && !item.isClosed) { 
     return item.close(); 
    } 
    } 
}); 

這是正確的嗎?基於我的知識(我是新的Javascript和CoffeeScript)我會翻譯爲

closeItem: function(item) { 
    if(item && item.close && !item.isClosed) item.close(); 
} 

我錯過了什麼嗎?

+0

':;'這本身就是一個'if'聲明 '如果(真){a ++;}其他{A - ;}' 等於 '真++:A-- ;' –

回答

4

雖然您可能想要返回item.close()(因爲這就是CoffeeScript版本所做的)的返回值,但您的翻譯還是不錯的。 CoffeeScript的翻譯可能更通用(例如,如果a的數字爲0,它將處理a?.foo)。如果你知道item是一個對象,那麼你的版本很好。 ?

+0

CoffeeScript正在處理邊緣案例,當項目是falsey(如'false'或'')。它區分存在與真實。 –

+0

@PeterLyons:對(其實我只是編了一個類似的觀察,在我的情況下編號爲'0')。在OP的代碼中不需要它,但它更通用。 –

+0

不好意思,但是'if(item)'是否已經檢查了javascript中的falsy值,所以對於'0'和''''值呢? –