0

我正在阅读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().

我从来没有见过一个函数或变量名只是这样输入,然后在&&运算符之后调用一个函数。

我猜这是短手。它是什么以及它的用途是什么?它是如何工作的?

4

5 回答 5

4

它是简写

if (callback)
{
   callback();
}

基本上,如果第一部分为空(或未定义)且都等于 false,则 && (逻辑与)失败并且它什么也不做。

如果定义了回调,则 && 的第一部分为真,因此它评估第二部分(在这种情况下调用方法)。

这被称为短路,因为逻辑 AND 运算符左侧的初始 false 意味着它不会尝试评估右侧表达式的第二部分(因为它已经未能通过 "is一切都是真的”)。注意:并非所有语言都在逻辑 AND 表达式中实现短路(VB 不是从内存中实现的),但 javascript 是明智的语言之一!:)

对于那些关心 undefined vs null vs 0 检查的细节的人:

http://www.sitepoint.com/javascript-truthy-falsy/

*免责声明:代码示例故意简单,并由训练有素的特技编码器执行。请不要在家里尝试这个。这是危险的,可能会导致投反对票:)

于 2013-09-23T09:45:11.703 回答
2

&& 运算符的工作方式如下:

a && b
  1. 评估一个
  2. 如果 a 是假的,则返回 a
  3. 返回 Evaluate b 的结果

所以,你提到的那一行相当于:

如果回调的值为真,则将回调作为函数调用

如果您将回调作为非零数字、非空字符串或对象提供,您可以轻松地触发此代码,但如果您提供一个函数或什么都不提供(这是代码作者所期望的),那么它将正常工作且仅如果提供了回调,则调用它。

编辑:

简而言之,Truthy/Falsy 解释:

  • 虚假值:未定义、null、false、0、''、NaN
  • 真实的价值观:其他一切

更长的解释:http ://www.sitepoint.com/javascript-truthy-falsy/

于 2013-09-23T09:51:19.130 回答
1

它将检查是否callback存在,如果存在,它将运行它。原因是&&运算符在第一个参数为假的情况下会短路。所以如果callback不存在就不会检查后半部分

于 2013-09-23T09:45:57.437 回答
1

它与以下内容相同:

if (typeof callback != "undefined"){
    callback();
}
于 2013-09-23T09:47:06.417 回答
0
  • 所有对象都被认为是真实的。
  • 如果字符串为空,则认为字符串为假。
  • null 和 undefined 被认为是错误的。
  • 如果数字为零,则该数字为假。

http://msdn.microsoft.com/en-us/library/ie/719e8e30%28v=vs.94%29.aspx

在逻辑 && 中,如果第一个为假,则整个语句也是如此。因此,如果没有回调(false),则 && 的下一部分将不会执行(这是 callback() 函数调用)!

于 2013-09-23T09:53:52.787 回答