Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Coffeescript三元if语句逻辑错误_Javascript_Jquery_If Statement_Coffeescript - Fatal编程技术网

Javascript Coffeescript三元if语句逻辑错误

Javascript Coffeescript三元if语句逻辑错误,javascript,jquery,if-statement,coffeescript,Javascript,Jquery,If Statement,Coffeescript,我在一个返回函数中有一个非常简单的逻辑,但它并不像预期的那样工作。当然,我可以使代码稍微长一点并解决这个问题,但我希望它尽可能小 这是我的密码: #Return title if exists or false otherwise getPageTitleFromMainContent = (mainContent) -> mainContent.find('#pageTitle') ?.length ?= false if y = (getPageTitleFromMainCon

我在一个返回函数中有一个非常简单的逻辑,但它并不像预期的那样工作。当然,我可以使代码稍微长一点并解决这个问题,但我希望它尽可能小

这是我的密码:

#Return title if exists or false otherwise
getPageTitleFromMainContent = (mainContent) ->
  mainContent.find('#pageTitle') ?.length ?=  false

if y = (getPageTitleFromMainContent $("#mainContent"))
  y.css color:red
如您所见,如果它在#main content中找到#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
  });
}
它应该是
\u ref:\u ref.length=false:void 0,而非
\u ref**1**:\u ref.length=false:void 0


谢谢大家!

不确定代码是否有意义。除非定义了长度,否则您实际上是在尝试分配给length属性。如果定义了它,它只返回length属性。看起来代码和行为是正确的,但您对存在运算符和返回值的理解是错误的。如果要返回找到的元素,可能需要将其与长度检查断开连接

可能是这样的:

getPageTitleFromMainContent = (mainContent) ->
  arr = mainContent.find('#pageTitle')
  if arr.length then arr else false

正如Ian在其更优雅的回答中所解释的,您不需要在arr上使用存在运算符(假设使用jquery),因为它将始终是一个元素数组(如果找不到,则长度为零)。

不确定代码是否有意义。除非定义了长度,否则您实际上是在尝试分配给length属性。如果定义了它,它只返回length属性。看起来代码和行为是正确的,但您对存在运算符和返回值的理解是错误的。如果要返回找到的元素,可能需要将其与长度检查断开连接

可能是这样的:

getPageTitleFromMainContent = (mainContent) ->
  arr = mainContent.find('#pageTitle')
  if arr.length then arr else false
正如Ian在其更优雅的回答中所解释的,您不需要在arr上使用存在运算符(假设使用jquery),因为它将始终是一个元素数组(如果找不到,则长度为零)

如果在
#main content
中找到
#pageTitle
,则应将其变为红色

您可以通过更简单的方法来实现这一点:

 $('#mainContent #pageTitle').css(color: 'red')
因为,如果它在
#mainContent
中找不到
#pageTitle
,它将尝试更改一组空元素的css——一个不可操作的元素

您所展示的代码没有真正意义<代码>?。
是不必要的,因为如果不匹配,jQuery选择器将不会返回
null
undefined
;它将返回一组空的元素。因此,它将始终返回
length
,这将始终是一个数字,因此赋值将永远不会执行,因为它取决于
length
返回
null
未定义的
。这很好,因为您可能不想将元素的长度设置为
false

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

如果在
#main content
中找到
#pageTitle
,则应将其变为红色

您可以通过更简单的方法来实现这一点:

 $('#mainContent #pageTitle').css(color: 'red')
因为,如果它在
#mainContent
中找不到
#pageTitle
,它将尝试更改一组空元素的css——一个不可操作的元素

您所展示的代码没有真正意义<代码>?。
是不必要的,因为如果不匹配,jQuery选择器将不会返回
null
undefined
;它将返回一组空的元素。因此,它将始终返回
length
,这将始终是一个数字,因此赋值将永远不会执行,因为它取决于
length
返回
null
未定义的
。这很好,因为您可能不想将元素的长度设置为
false


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

如果元素不存在,jquery将返回一个空数组,我不希望这样;我希望它返回false。而且,正如我所说的,如果不指定值,那就很好了。coffeescript非常强大,我想利用它。用建议的解决方案更新了我的答案。如果元素不存在,jquery将返回一个空数组,我不希望这样;我希望它返回false。而且,正如我所说的,如果不指定值,那就很好了。咖啡脚本非常强大,我想利用它。用建议的解决方案更新了我的答案。实际的代码并不像改变颜色那么简单——这只是一个例子。您关于sizzle return值的逻辑是正确的。但是有没有一种方法可以实现@Marius Kjeldahl的代码,而不使用任何变量,比如
el
?我的意思是,你可以搜索两次
如果mainContent.find('#pageTitle').length>0,则mainContent.find('#pageTitle')否则为false
,或者类似于
mainContent.find('#pageTitle').length&&mainContent.find('#pageTitle')
。那更糟。尽可能编写可读性最好的代码。把它压缩成一个表达式并没有什么好处,它会让你或其他人将来更难理解代码。对。我想我已经尽力解决这个小问题了
\u ref
获取
\main content
,但是当
coffeescript
看到
.length?
时,它不能通过
\u ref
变量的运算符返回,它返回的是长度的
\u ref1
。我会让这个问题暂时得不到回答;只是跳跃。正如Ian指出的,易读易懂的代码每次都胜过smartypants表达式和运算符,并且随着“每一次”之间的时间越来越长,变得更加重要。实际的代码并不像更改颜色那么简单——这只是一个例子。您关于sizzle return值的逻辑是正确的。但是有没有一种方法可以实现@Mar的目标呢