【问题标题】:Advantages of setting variables inside a boolean evaluation expression在布尔求值表达式中设置变量的优点
【发布时间】:2015-08-23 06:11:26
【问题描述】:

the MDN page for the wheel event 上,有一个代码示例,其中在第 30-31 行包含以下内容:

function( originalEvent ) {
  !originalEvent && ( originalEvent = window.event );

第二行似乎采用了一些捷径,这些捷径依赖于 JavaScript 在内部评估布尔表达式的方式。如果我理解正确,它的目的是在没有传递参数的情况下将originalEvent 设置为window.event。其作用与以下相同:

if (!originalEvent) {
  originalEvent = window.event;
}

orginalEvent = (originalEvent) ? orginalEvent : window.event;

使用MDN网站的建设有什么好处?

【问题讨论】:

  • 根据您的问题,您似乎拥有自己回答这个问题的所有工具:) 由于您显示的所有三个版本的代码都有相同的结果,因此它开始归结为:可读性、代码优化和开发者偏好。
  • 你的最后一行代码与其他两行不等价,仅作记录。
  • @Blindy:你能解释一下最后一行有何不同吗?
  • 当然,即使originalEvent 中有值,您也可以执行代码。在您看来,它并没有改变代码的含义,但并不等同。

标签: javascript lazy-evaluation boolean-expression


【解决方案1】:

要添加更多的晦涩,您还可以使用

function(originalEvent) {
  originalEvent = originalEvent || window.event;
}

没有正确的方法可以做到这一点,而且它们都是完全有效的,我经常使用上面的那个,因为我认为它更容易阅读(尽管很多人会因为这样做而对我挥舞拳头)。 我也相信你可以通过大多数 JSLint'ers 的默认设置获得所有方法,所以这确实是一个风格问题。

【讨论】:

    【解决方案2】:

    与您建议的方式相比,MDN 的方式并没有完美的优势。这是风格问题。

    你提到的所有方法都做同样的事情。

    MDN 的方式更“简洁”,但其他人更喜欢 if...else 语句,就像您出于可读性目的而指出的那样。视具体情况而定,但我认为在大多数情况下,选择其中一个是风格问题,不一定optimization

    【讨论】:

      【解决方案3】:

      使用MDN网站的建设有什么好处?

      看起来很酷。

      我本来想说简洁的,但以下内容同样简短,一目了然:

      function(originalEvent) {
        if(!originalEvent) originalEvent = window.event;
      }
      

      但请注意,他们的样本不依赖于任何“内部”操作顺序或任何险恶的东西。运算符短路(这就是所谓的)是许多语言中定义明确且流行的部分,其中 Javascript 只是一个示例。您可以在 C 中编写相同的确切语句,它会正常工作。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2010-11-29
        • 2015-08-03
        • 1970-01-01
        • 1970-01-01
        • 2018-01-04
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多