我刚刚浏览 modal.js 中的一些代码,发现了以下代码行:
var options = $.extend({}, Modal.DEFAULTS, $this.data(), typeof option == 'object' && option)
除了最后一部分之外,该行大部分都有意义,即:
typeof option == 'object' && option
我理解 typeof
运算符,但我不理解它在 $.extend
中的用法,有人可以解释一下吗?
我的难点也可以在网上的插件代码中找到。 Line 296 。
最佳答案
来自jQuery documentation on $.extend()
,您会看到它与以下参数一起使用:
$.extend( target [, object1 ] [, objectN ] )
在您的代码中:
{}
是目标,即您将在其上构建的新对象。
Modal.DEFAULTS
是一个对象,您可以将属性复制到目标
。
$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
其中a
、b
和c
是已定义的变量,它将检查a
不是假的,如果是,则返回 false。否则,它将继续检查b
是否为假等等,如果所有3个条件都为真,它将返回最后一个(即c
)。在您的代码中,最后一个值是 option
。
JS Fiddle Demo
如Matt在评论中提到,此行为是由于 short circuit evaluation .
关于javascript - 理解 modal.js 中复杂的 $.extend,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28932250/