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

Ale*_*nik 2 javascript jquery

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

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

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

typeof option == 'object' && option
Run Code Online (Sandbox Code Playgroud)

我理解typeof操作员但我不明白它的用法$.extend,有人可以解释一下吗?

我的难度也可以在网上的插件代码中找到.296行.

ble*_*lex 7

jQuery文档开始$.extend(),您将看到它与以下参数一起使用:

$.extend( target [, object1 ] [, objectN ] )
Run Code Online (Sandbox Code Playgroud)

在你的代码中:

{} 是目标,你将要建立的新对象.

Modal.DEFAULTS是一个对象,您可以从中将属性复制到target.

$this.data() 是另一个将添加属性的对象.

typeof option == 'object' && option本质上是说option如果它是一个属性将被复制object.如果没有,将不会添加任何内容.这是为了避免错误,如果没有定义.

它相当于:

typeof option == 'object' ? option : false
Run Code Online (Sandbox Code Playgroud)

或者,更长的版本:

(function(){ if(typeof option == 'object') {return option} return false })()
Run Code Online (Sandbox Code Playgroud)

JS小提琴演示

让我们走得更远

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

a && b && c
Run Code Online (Sandbox Code Playgroud)

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

JS小提琴演示

正如Matt在评论中提到的那样,这种行为是由于短路评估造成的.