为什么 var x = x = x || {} 比 var x = x || {} 更彻底?

10 浏览
0 Comments

为什么 var x = x = x || {} 比 var x = x || {} 更彻底?

作为一个初学者,我努力写出简洁的 JavaScript 代码。最近我在阅读这篇关于 JavaScript 命名空间的文章时,偶然发现了这一段落:

下面代码示例的开头展示了在定义变量(对象命名空间)之前,你可以检查变量是否已存在的不同方法。通常你会看到开发者使用 Option 1,然而 Option 3 和 Option 5 可以被认为更加细致,而 Option 4 则被认为是一种良好的最佳实践。

Option 1:var myApplication = myApplication || {};

Option 2:if(!MyApplication) MyApplication = {};

Option 3:var myApplication = myApplication = myApplication || {}

Option 4:myApplication || (myApplication = {});

Option 5:var myApplication = myApplication === undefined ? {} : myApplication;

Option 1 是我经常见到的用法,我也很理解。

Option 2 是可以的,但似乎缺少一个先前的 var myApplication 或者一个 if(!window.myApplication) 的条件。否则,如果 myApplication 不在全局范围内,条件 if(!myApplication) 会抛出错误,对吗?

Option 3 是我遇到困难的一个选项:我理解的是 myApplication = myApplication 会首先执行,并且由于开头的 var,myApplication 在全局范围内。我的问题是,我无法想象出这个选项比 Option 1 做得更多的情况。

Option 4 在我看来最好写成 window.myApplication || (myApplication = {}),以避免如果 myApplication 不在全局范围内时抛出错误。

Option 5 排除了除 undefined 以外的假值,但这是一个好主意吗?如果 myApplication 是一个空字符串,后面的代码很可能会失败,对吗?

能否有人能够解释一下不同选项之间的区别,特别是解释为什么 Option 3 被描述为更加细致?

0