理解modal.js中复杂的$ .extend

时间:2015-03-08 21:44:00

标签: javascript jquery

我刚刚在modal.js中查看了一些代码,并遇到了以下代码行:

 var options = $.extend({}, Modal.DEFAULTS, $this.data(), typeof option == 'object' && option)

除了最后一部分,这条线最有意义,即:

typeof option == 'object' && option

我了解typeof运算符,但我不了解其在$.extend中的用法,有人可以解释一下吗?

我的难题也可以在网上的插件代码中找到。 Line 296

1 个答案:

答案 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 })()

JS Fiddle Demo

让我们走得更远

如果您有多个&&链接,例如:

a && b && c

其中abc是定义的变量,它会检查a是不是假的,如果是,则返回false。否则它将继续检查b是否是假的等等,如果所有3个条件都是真实的,它将返回最后一个(即c)。在您的代码中,最后一个值为option

JS Fiddle Demo

正如Matt在评论中提到的那样,此行为归因于short circuit evaluation