函数的Javascript | |语法
我试图理解下面的语法块(取自angular文档,表示angular noop作为“空”函数的使用) 我不懂“| |”的语法。我试图查找它,但在搜索时遇到了困难,不确定要搜索什么 将其视为“或”语法,对我来说,这意味着如果函数被分配给回调,或者如果函数被分配给angular noop,则等于true,然后函数被调用为true。但显然这是错误的 为这个问题的幼稚提前道歉函数的Javascript | |语法,javascript,Javascript,我试图理解下面的语法块(取自angular文档,表示angular noop作为“空”函数的使用) 我不懂“| |”的语法。我试图查找它,但在搜索时遇到了困难,不确定要搜索什么 将其视为“或”语法,对我来说,这意味着如果函数被分配给回调,或者如果函数被分配给angular noop,则等于true,然后函数被调用为true。但显然这是错误的 为这个问题的幼稚提前道歉 -编辑- 为了进一步澄清,我从示例中猜出了它的作用。然而,我试图找出javascripts规则所说的会导致(callback1 |
-编辑-
为了进一步澄清,我从示例中猜出了它的作用。然而,我试图找出javascripts规则所说的会导致(callback1 | | callback2)
的return语句返回一个函数对象而不是布尔值(这一点在示例中可以调用子表达式的return)
(callback || angular.noop)(result);
缩写为:
if (callback) {
callback(result);
} else {
angular.noop(result);
}
它利用了|
是惰性执行的这一事实。您要查找的搜索词是。为了解释其工作原理的“原因”,我们可以看看ECMAScript规范,具体来说
&&
或|
运算符生成的值不一定是布尔型的。生成的值始终是两个操作数表达式之一的值。请注意,这并不意味着您不能依赖以下表达式:
基本上是这个声明
(回调| | angular.noop)(结果)代码>
可以理解为:
使用result
如果未定义回调,将计算OR(|
)以调用angular.noop
函数,将变量结果传递给该函数
angular.noop()
函数是一个不执行任何操作的函数。更多阅读这里在你的帮助下,我想我已经解决了我的问题。请注意| |运算的返回值不是布尔值,而是仅供参考的实际值?我会提前接受你的答案。@ThinkBonobo这里的顶级答案解释得比我感谢的更简洁。| |实际上返回的是一个函数,而不是布尔值。拿到那块就让剩下的对我有意义了。
if (callback) {
callback(result);
} else {
angular.noop(result);
}
if (a || b) // <-- logical expression will evaluate to the value of a or b, NOT true or false
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