Javascript ||函数的语法

时间:2015-04-08 04:44:34

标签: javascript

我正在尝试理解下面的语法块(取自角文档来表示使用角度noop作为'空'函数)

function foo(callback) {
  var result = calculateResult();
  (callback || angular.noop)(result);
}

我不明白'||'句法。我尝试查找但搜索时遇到问题,并且不确定要搜索什么。

将其视为'OR'语法,如果函数被分配给回调,或者如果函数被赋值给angular noop将等于true,那么函数将被调用为true。但显然那是错的

提前为问题的新问题道歉。

- EDIT -

为了进一步澄清,我知道它从示例中猜到了什么。但是,我试图找出javascripts规则所说的会导致(callback1 || callback2)的return语句返回一个函数对象而不是一个布尔值(正如在示例中你可以调用返回的事实所暗示的那样)子表达式)。

2 个答案:

答案 0 :(得分:5)

这一位

(callback || angular.noop)(result);

简称:

if (callback) { 
    callback(result); 
} else {
    angular.noop(result); 
}

利用||懒惰执行的事实。您正在寻找的搜索字词为lazy evaluation。解释"为什么"关于它是如何工作的,我们可以看一下ECMAScript规范,特别是11.11 Binary Logical Operators

  

&&||运算符生成的值不一定是Boolean类型。生成的值将始终是两个操作数表达式之一的值。请注意,这并不意味着您不能依赖于以下表达式:

if (a || b) // <-- logical expression will evaluate to the value of a or b, NOT true or false

因为JavaScript将布尔值计算为truthy或falsy,正式定义为ECMAScript规范中的操作ToBoolean()

从9.2 ToBoolean

  

抽象操作ToBoolean根据表11将其参数转换为Boolean类型的值:

 Argument         
   Type           Result

 Undefined        false
 Null             false
 Boolean          The result equals the input argument (no conversion).
 Number           The result is false if the argument is +0, −0, or NaN; 
                      otherwise the result is true.
 String           The result is false if the argument is the empty String 
                      (its length is zero); otherwise the result is true.
 Object           True

答案 1 :(得分:5)

基本上是陈述

(callback || angular.noop)(result);

可以理解为:

使用callback

参数调用函数angular.noopresult

如果未定义回调,将评估OR(||)以调用angular.noop函数将变量result传递给函数。

angular.noop()函数是一个什么都不做的函数。更多内容请阅读https://docs.angularjs.org/api/ng/function/angular.noop