javascript - Coffeescript三元if语句错误逻辑

标签 javascript jquery if-statement coffeescript

我的返回函数有一个非常简单的逻辑,但它没有按预期工作。当然,我可以使代码稍微长一些并解决问题,但我希望它尽可能小。

这是我的代码:

#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; .

http://jsfiddle.net/X8VjJ/1/

谢谢!

最佳答案

if it finds the #pageTitle in #mainContent, it should make it red

您可以通过更简单的方法来完成此操作:

 $('#mainContent #pageTitle').css(color: 'red')

因为,如果它没有#mainContent中找到#pageTitle,它会尝试更改空集的CSS元素——无操作。

您提供的代码实际上没有意义。 ?. 是不必要的,因为如果不匹配,jQuery 选择器将不会返回 nullundefined;它将返回一个空元素集。因此它将始终返回 length,它始终是一个数字,因此赋值永远不会执行,因为它依赖于 length 返回 null未定义。这很好,因为您可能不想将元素的长度设置为 false

最后,这不是三元 if 语句。 CoffeeScript 的三元 if 语句如下所示:if foo then bar else baz

关于javascript - Coffeescript三元if语句错误逻辑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15005613/

相关文章:

javascript - 自动登录表单的 HTML 文件

javascript - 从表的td获取id

javascript - 如何使用 Capybara 和 ChromeDriver 模拟输入字段中的输入?

swift - UIAlert 问题

javascript - HTML 创建 onsubmit 重定向

javascript - 如何使用 JavaScript 拉伸(stretch)图像以填充 div

javascript - 填充 amCharts 线条路径并删除 yAxes 值

javascript - 删除全屏垂直滚动条?

javascript - 忽略条件语句

java - 脏话过滤器 - Java