我刚刚在modal.js中查看了一些代码,并遇到了以下代码行:
var options = $.extend({}, Modal.DEFAULTS, $this.data(), typeof option == 'object' && option)
除了最后一部分,这条线最有意义,即:
typeof option == 'object' && option
我了解typeof
运算符,但我不了解其在$.extend
中的用法,有人可以解释一下吗?
我的难题也可以在网上的插件代码中找到。 Line 296。
答案 0 :(得分:7)
从jQuery documentation on $.extend()
开始,您会看到它与以下参数一起使用:
$.extend( target [, object1 ] [, objectN ] )
在您的代码中:
{}
是目标,是您将要构建的新对象。
Modal.DEFAULTS
是一个对象,您可以将属性复制到target
。
$this.data()
是另一个将添加属性的对象。
typeof option == 'object' && option
基本上是说option
的属性如果是object
则会被复制。如果没有,将不会添加任何内容。这是为了避免错误,如果没有定义。
它的等效时间较短:
typeof option == 'object' ? option : false
或者更长的版本:
(function(){ if(typeof option == 'object') {return option} return false })()
让我们走得更远
如果您有多个&&
链接,例如:
a && b && c
其中a
,b
和c
是定义的变量,它会检查a
是不是假的,如果是,则返回false。否则它将继续检查b
是否是假的等等,如果所有3个条件都是真实的,它将返回最后一个(即c
)。在您的代码中,最后一个值为option
。
正如Matt在评论中提到的那样,此行为归因于short circuit evaluation。