函数的Javascript语法

Javascript || syntax for functions

本文关键字:语法 Javascript 函数      更新时间:2023-09-26

我正在努力理解以下语法块(取自angular docs,将angular noop的使用表示为"空"函数)

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

我不懂"||"语法。我试着查找它,但搜索时遇到了问题,也不确定该搜索什么。

将其视为"OR"语法,这对我来说意味着,如果一个函数被分配给回调,或者如果该函数被分配到角度noop,则等于true,然后函数被调用为true。但显然这是错误的

提前为这个问题的新颖性道歉。

- EDIT -

为了进一步澄清,我从这个例子中猜到了它的作用。然而,我试图弄清楚javascript规则是怎么说的,这将导致(callback1 || callback2)的return语句返回一个函数对象,而不是布尔值(在本例中,您可以调用子表达式的return)。

此位

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

是的缩写

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

它利用了||被延迟执行的事实。您要查找的搜索词是惰性评估。为了解释这是如何工作的,我们可以看看ECMAScript规范,特别是11.11二进制逻辑运算符,

&&||运算符产生的值不一定是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根据表11:将其参数转换为布尔类型的值

 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

基本上是语句

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

可以读作:

使用result 参数调用函数callbackangular.noop

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

angular.noop()函数是一个不执行任何操作的函数。更多阅读此处https://docs.angularjs.org/api/ng/function/angular.noop