我正在尝试理解下面的语法块(取自角文档来表示使用角度noop作为'空'函数)
function foo(callback) {
var result = calculateResult();
(callback || angular.noop)(result);
}
我不明白'||'句法。我尝试查找但搜索时遇到问题,并且不确定要搜索什么。
将其视为'OR'语法,如果函数被分配给回调,或者如果函数被赋值给angular noop将等于true,那么函数将被调用为true。但显然那是错的
提前为问题的新问题道歉。
- EDIT -
为了进一步澄清,我知道它从示例中猜到了什么。但是,我试图找出javascripts规则所说的会导致(callback1 || callback2)
的return语句返回一个函数对象而不是一个布尔值(正如在示例中你可以调用返回的事实所暗示的那样)子表达式)。
答案 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.noop
或result
如果未定义回调,将评估OR(||
)以调用angular.noop
函数将变量result
传递给函数。
angular.noop()
函数是一个什么都不做的函数。更多内容请阅读https://docs.angularjs.org/api/ng/function/angular.noop