2013-10-17 49 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'和''''值呢? –