查看 Google 的书签气泡库代码,我发现了这个:
var google = google || {};
google.bookmarkbubble = google.bookmarkbubble || {};
有人可以解释他们在这里做什么以及为什么要这样做吗?既然 JS 是一种解释性语言,为什么你需要将相同的 google 对象分配给 google 变量?每次加载页面时,其中包含的脚本不会只执行一次吗?
查看 Google 的书签气泡库代码,我发现了这个:
var google = google || {};
google.bookmarkbubble = google.bookmarkbubble || {};
有人可以解释他们在这里做什么以及为什么要这样做吗?既然 JS 是一种解释性语言,为什么你需要将相同的 google 对象分配给 google 变量?每次加载页面时,其中包含的脚本不会只执行一次吗?
他们正在建立一个类似命名空间的对象。如果已经有一个google
对象或google.bookmarkbubble
对象,他们会确保不会替换它。例如,如果您添加了另一个 Google 库,它可能已经设置了一个google
如下所示的对象:
{
somelibrary: {
...
}
}
因此,如果他们只有:
var google = { bookmarkbubble: { ... } }
这会破坏任何引用的代码google.somelibrary
。同样,如果他们没有var google = google || {};
并且您还没有google
定义,那么google.bookmarkbubble
将引发错误。
简而言之,此代码确保google.bookmarkbubble
对象存在而不覆盖任何先前定义的google
对象google.bookmarkbubble
。
var google = google || {};
是一种简写语法
if (!google) {
google = {};
}
这确保了第二次分配不会因为google
至少是一个空哈希而失败。
当一个库包含许多用户可能包含或不包含的文件时,通常会这样做。第一个库将初始化google
为一个空对象(因为它的计算结果为空),随后的库将保留已添加到该对象的属性。