Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/379.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
函数的Javascript | |语法_Javascript - Fatal编程技术网

函数的Javascript | |语法

函数的Javascript | |语法,javascript,Javascript,我试图理解下面的语法块(取自angular文档,表示angular noop作为“空”函数的使用) 我不懂“| |”的语法。我试图查找它,但在搜索时遇到了困难,不确定要搜索什么 将其视为“或”语法,对我来说,这意味着如果函数被分配给回调,或者如果函数被分配给angular noop,则等于true,然后函数被调用为true。但显然这是错误的 为这个问题的幼稚提前道歉 -编辑- 为了进一步澄清,我从示例中猜出了它的作用。然而,我试图找出javascripts规则所说的会导致(callback1 |

我试图理解下面的语法块(取自angular文档,表示angular noop作为“空”函数的使用)

我不懂“| |”的语法。我试图查找它,但在搜索时遇到了困难,不确定要搜索什么

将其视为“或”语法,对我来说,这意味着如果函数被分配给回调,或者如果函数被分配给angular noop,则等于true,然后函数被调用为true。但显然这是错误的

为这个问题的幼稚提前道歉

-编辑-

为了进一步澄清,我从示例中猜出了它的作用。然而,我试图找出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