我的返回函数有一个非常简单的逻辑,但它没有按预期工作。当然,我可以使代码稍微长一些并解决问题,但我希望它尽可能小。
这是我的代码:
#Return title if exists or false otherwise
getPageTitleFromMainContent = (mainContent) ->
mainContent.find('#pageTitle') ?.length ?= false
if y = (getPageTitleFromMainContent $("#mainContent"))
y.css color:red
如您所见,如果它在#mainContent 中找到#pageTitle,则应将其设为红色。但如果找到的话,该函数不会返回#pageTitle,而是返回.length。
从 js2coffee.org 我看到代码被编译成:
var getPageTitleFromMainContent, y;
getPageTitleFromMainContent = function(mainContent) {
var _ref, _ref1;
return (_ref = mainContent.find('#pageTitle')) != null ? (_ref1 = _ref.length) != null ? **_ref1 : _ref.length = false : void 0;**
};
if (y = getPageTitleFromMainContent($("#mainContent"))) {
y.css({
color: red
});
}
它应该是 _ref : _ref.length = false : void 0;
,而不是 _ref**1** : _ref.length = false : void 0;
.
谢谢!
最佳答案
if it finds the
#pageTitle
in#mainContent
, it should make it red
您可以通过更简单的方法来完成此操作:
$('#mainContent #pageTitle').css(color: 'red')
因为,如果它没有在#mainContent
中找到#pageTitle
,它会尝试更改空集的CSS元素——无操作。
您提供的代码实际上没有意义。 ?.
是不必要的,因为如果不匹配,jQuery 选择器将不会返回 null
或 undefined
;它将返回一个空元素集。因此它将始终返回 length
,它始终是一个数字,因此赋值永远不会执行,因为它依赖于 length
返回 null
或未定义
。这很好,因为您可能不想将元素的长度设置为 false
。
最后,这不是三元 if 语句。 CoffeeScript 的三元 if 语句如下所示:if foo then bar else baz
。
关于javascript - Coffeescript三元if语句错误逻辑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15005613/