gpt4 book ai didi

Javascript ||函数语法

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:07:46 25 4
gpt4 key购买 nike

我试图理解下面的语法 block (取自 Angular 文档以表示将 Angular noop 用作“空”函数)

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

我不明白'||'句法。我试着查找它,但在搜索时遇到了问题,而且不确定要搜索什么。

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

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

- 编辑 -

为了进一步澄清,我知道它从示例中猜测了什么。但是,我试图弄清楚什么 javascripts 规则会导致 (callback1 || callback2) 的 return 语句返回一个函数对象而不是 bool 值(正如在您可以调用子表达式返回的示例)。

最佳答案

这一点

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

是以下内容的缩写:

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

它利用了 || 被延迟执行的事实。您要查找的搜索词是 lazy evaluation .为了解释“为什么”这是如何工作的,我们可以看一下 ECMAScript 规范,特别是 11.11 Binary Logical Operators ,

The value produced by a && or || operator is not necessarily of type Boolean. The value produced will always be the value of one of the two operand expressions. Note that this doesn't mean that you can't depend on an expression such as:

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

因为 JavaScript 将 bool 值评估为 truthy 或 falsy,因此在 ECMAScript 规范中正式定义为操作 ToBoolean()

从 9.2 到 bool 值

The abstract operation ToBoolean converts its argument to a value of type Boolean according to Table 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

关于Javascript ||函数语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29506113/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com