在布尔评估表达式

时间:2015-06-08 16:50:36

标签: javascript lazy-evaluation boolean-expression

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网站的结构有什么优势?

3 个答案:

答案 0 :(得分:0)

  

使用MDN网站的结构有什么优势?

看起来很酷。

我会说简洁,但下面的内容同样简短,一目了然,发生了什么:

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

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

答案 1 :(得分:0)

MDN没有完全优于您建议的方式。这是一种风格问题。

你提到的所有方式完全相同。

MDN的方式更加“简洁”,但其他人更喜欢if...else语句,就像您为了可读性目的而提到的语句。取决于具体情况,但我认为在大多数情况下,选择一种或另一种是风格问题,而不一定是optimization

答案 2 :(得分:0)

要添加更多默默无闻,您还可以使用

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

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