我正在阅读插件的源代码,其中有一行看起来很短,但我不明白它是什么。下面是来自源代码的片段(版本3.0.0):
Tab.prototype.activate = function (element, container, callback) {
var $active = container.find('> .active')
var transition = callback
&& $.support.transition
&& $active.hasClass('fade')
function next() {
$active
.removeClass('active')
.find('> .dropdown-menu > .active')
.removeClass('active')
// some code removed for conciseness
callback && callback()
}
所讨论的问题是:callback && callback()
。
我从未见过像这样输入函数或变量名,然后在&&
操作符之后调用函数。
我猜这只手太短了。它是什么,它意味着什么?它是如何工作的呢?
发布于 2013-09-23 01:45:11
是简写的
if (callback)
{
callback();
}
基本上,如果第一部分是null (或未定义的),两者都等同于false,则&& (逻辑和)失败,而它什么也不做。
如果定义了回调,则&&的第一部分为true,因此它计算第二部分(在本例中是调用方法)。
这就是所谓的短路,在逻辑和运算符的左侧,这意味着它不试图在右边计算表达式的第二部分(因为它已经通过了“一切都是真”的测试)。注意:并非所有语言都在逻辑和表达式中实现短路(VB不是从内存中实现的),但javascript是其中一种明智的语言!:)
对于那些关心未定义的vs null vs 0检查的更精细点的人:
http://www.sitepoint.com/javascript-truthy-falsy/
*免责声明:代码示例故意简单,由训练有素的特技编码人员执行。请不要在家里尝试这样做。这是危险的,可能导致选票下降:)
发布于 2013-09-23 01:51:19
&&操作员的工作方式如下:
a && b
因此,您所提到的行相当于:
如果回调的值是真的,则调用回调作为函数
如果以非零号、非空字符串或对象的形式提供回调,则可以很容易地跳过这段代码,但是如果您提供一个函数或什么都不提供(这正是代码的作者所期望的),那么它将正常工作,并且只有在提供回调时才调用回调。
编辑:
Truthy/Falsy简短地解释:
发布于 2013-09-23 01:45:57
它将检查callback
是否存在,如果存在,则将运行它。原因是&&
算子在第一个参数为假的情况下会短路。因此,如果callback
不存在,它将不会检查下半年
https://stackoverflow.com/questions/18956157
复制