函数的Javascript语法
Javascript || syntax for functions
我正在努力理解以下语法块(取自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
参数调用函数callback
或angular.noop
如果未定义回调,则将评估OR(||
),以调用将变量result
传递给函数的angular.noop
函数。
angular.noop()
函数是一个不执行任何操作的函数。更多阅读此处https://docs.angularjs.org/api/ng/function/angular.noop
- Javascript未捕获语法错误意外的标识符错误
- Javascript语法向设置发出sessionStorage值
- javascript自执行函数-不同的语法
- 函数的Javascript语法
- 有没有针对带有表的JavaScript的Markdown语法解析器
- 重写需要javascript中带有import关键字的语法
- 如何定义const函数javascript(语法糖)
- 循环的Javascript冻结浏览器,没有语法错误
- 为什么匿名函数本身就是javascript中的语法错误
- 这怎么不是语法错误?这毫无意义!(javascript)
- javascript匿名函数语法
- javascript在代码背后的语法
- Onclick不会启动..可能存在javascript语法问题
- 在javascript函数的循环中设置全局布尔变量的最佳语法
- 什么's当前命名空间/类中JavaScript子命名空间/类的语法
- 我可以将为java创建的语法文件转换为javascript的语法文件吗
- “”附近的语法错误;elseif”;Javascript
- javascript eval方法语法
- 用jquery替换javascript语法
- Google 电子表格更新的正确语法 - Javascript