我正在阅读Twitter Bootstrap Tabs Plugin的源代码,并且有一条似乎是简短的东西,但我不明白它是什么。这是源代码片段(版本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()
。
我从未见过像这样输入的函数或变量名,然后在&&
运算符之后调用函数。
我猜这是短手的。它是什么,它意味着什么?它是如何工作的?
答案 0 :(得分:4)
这是
的简写if (callback)
{
callback();
}
基本上如果第一部分为null(或未定义),它们都等于false,则&& (逻辑和)失败,它什么也没做。
如果定义了回调,则&&和&是的,所以它评估第二部分(在这种情况下调用方法)。
这被称为短路,作为逻辑AND运算符左侧的初始false,意味着它不会尝试评估右侧表达式的第二部分(因为它已经失败了测试“一切都是真的”)。注意:并非所有语言都在逻辑AND表达式中实现短路(VB不是来自内存),但javascript是明智之一! :)
对于那些关心undefined vs null vs 0检查的细节的人:
*免责声明:代码示例有意简单,由经过培训的特技编码员执行。请不要在家里尝试这个。这很危险,可能会导致投票结果:)
答案 1 :(得分:2)
&&运算符的工作原理如下:
a && b
所以,你提到的那句话就相当于:
如果回调的值是真的,请将回调作为函数调用
如果您将回调提供为非零数字,非空字符串或对象,则可以轻松地提取此代码,但如果您提供函数或不提供任何内容(这是代码作者所期望的那样),那么它将起作用正确,只有在提供回调时才调用回调。
修改强>
Truthy / Falsy简短地解释道:
答案 2 :(得分:1)
它将检查callback
是否存在,如果存在,那么它将运行它。原因是&&
运算符在第一个参数为false的情况下会短路。因此,如果callback
不存在,则不会检查后半部分
答案 3 :(得分:1)
它与:
相同if (typeof callback != "undefined"){
callback();
}
答案 4 :(得分:0)
- 所有对象都被认为是真实的。
- 如果字符串为空,则视为字符错误。
- null和undefined被认为是假的。
- 如果数字为零,则数字为false。
http://msdn.microsoft.com/en-us/library/ie/719e8e30%28v=vs.94%29.aspx
并且在逻辑&&如果第一个是假的那么整个陈述。因此,如果没有回调(假),那么&&的下一部分将不会执行(调用callback()函数)!