理解模态.js中复杂的 $.extend

Understanding complex $.extend in modal.js

本文关键字:extend 复杂 模态 js      更新时间:2023-09-26

我只是在模态中浏览一些代码.js并遇到了以下代码行:

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

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

typeof option == 'object' && option

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

我的困难线也可以在在线插件代码中找到。296路。

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

$.extend( target [, object1 ] [, objectN ] )

在您的代码中:

{}是目标,是您将基于其构建的新对象。

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

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

typeof option == 'object' && option本质上是说,如果optionobject,它的属性将被复制。否则,不会添加任何内容。这是为了避免在未定义时出现错误。

它更短的等价物:

typeof option == 'object' ? option : false

或者,更长的版本:

(function(){ if(typeof option == 'object') {return option} return false })()

JS小提琴演示

让我们走得更远

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

a && b && c

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

JS小提琴演示

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