【问题标题】:What does this expression mean in javascript?这个表达式在javascript中是什么意思?
【发布时间】:2011-06-22 00:45:13
【问题描述】:
$('.blocks','#grid').each(function (i) {
              $(this).stop().css({opacity:0}).delay(100).animate({
                'opacity': 1
              }, {
                duration: 2000,
                complete: (i !== row * cols - 1) ||
                function () {
                  alert('done');
                }

              });
            });

“||”是什么意思运算符在动画函数的“完整”属性中是什么意思?

【问题讨论】:

标签: javascript jquery object expression operator-keyword


【解决方案1】:

它利用了short circuit evaluation。虽然左侧是真实,但它不会费心评估右侧。

这是因为对于OR,如果一个条件是真实,它不需要为其他条件而烦恼,因为它已经知道足够的信息来回答这个条件。它们也是从左到右进行评估的。

此外,在 JavaScript 中,它不是返回 truefalse 的条件,而是返回它评估的最后一个操作数。你可以看到为什么这很有用。

【讨论】:

  • 谁评论了虽然,我已经在维基百科上放置了一个提及的链接。
  • 我没有对此发表评论,但基本上所有 Wiki 所说的都是使用“while”而不是“whilst”来防止听起来自命不凡,因为白话中不再使用 while。
  • @vol7ron:很公平,我会改变它;)
【解决方案2】:

||是逻辑运算符 http://www.w3schools.com/js/js_comparisons.asp

它将“偏向”左侧,直到不再满足左侧条件,此时它将执行右侧,这是一个执行警报的匿名函数。

【讨论】:

    【解决方案3】:

    它是逻辑或运算符,但它仅在左侧表达式为假时计算右侧表达式。

    如果左边的表达式是true,那么它知道整个表达式的计算结果为真,因此它不会计算(或执行)右边的表达式。

    【讨论】:

      【解决方案4】:

      表达式似乎是淡入的。

      || 的逻辑 OR 类似于 if 语句的 else 情况。如果左侧计算结果为 false,则创建函数并调用警报。


      给定:

      • (i !== row * cols - 1) || function () { alert('done');  }
        

      在这种情况下将分配函数声明:

      • false || function (){ alert('done'); }
        

      注意,“完成”属性不包含值,只是一个函数定义,您需要像 complete() 这样调用完成。如果左侧是false,则要调用该函数,您必须将其括在括号中并调用它:

      • complete: (i !== row * cols - 1) || (function () {alert('done');})()
        

      注意:只有在某些东西未定义(我认为)或i 等于rows*cols -1 时,左侧才会为假。

      【讨论】:

      • 我同意你所说的,但补充一点:在我看来complete 是一种奇怪的声明,因为它可能最终成为真的(非函数),或对警报功能的引用。不能说我曾经需要(或想要)在自己的代码中这样做 - 我最接近的是选择 null/undefined 或函数引用。
      • 我想说,函数也是一个值;)
      • @nnnnn:对我来说,它看起来像是为了调试而放置的,因为它使用的是alert;然而,用户稍后可能会使用“完整”属性作为if (this.complete != true){this.complete()} 之类的东西——请注意,它必须与 true 进行比较,因为持有该函数是真实的;换句话说,你不能做if (!this.complete){ ... },因为在任何一种情况下它都会产生一个真实的价值。不过,你可以滥用NaN,然后使用if(!(a*1)){ ... }
      • @Felix - 我知道(但我想你知道我的意思)。 @vol7tron - 是的,我想到了 if 语句的用法,就像你描述的那样,但它给了我一种不好的感觉。虽然我不会说所有非正统的编码结构都是不好的,但我对“棘手”的事情持谨慎态度,这些事情在我编写它们时可能是有意义的,但如果我必须在一个月后调试代码,就会感到困惑。
      • @nnnnnn:这是对新程序员的合理恐惧。随着您的进步,您将寻找缩短代码和减少处理时间的方法。这是一种不需要的优化形式,但却是高级程序员梦寐以求的。如果有什么棘手的问题,值得将其放入您的文档中,该文档可以很长,但在您的代码之外。
      猜你喜欢
      • 2010-10-10
      • 1970-01-01
      • 2015-02-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-27
      • 1970-01-01
      • 2011-03-04
      相关资源
      最近更新 更多