验证JavaScript中是否存在变量

Tar*_*rik 2 javascript namespaces

在阅读JSF书籍时,作者实现了一个用作命名空间的映射,在该映射中定义了一些JavaScript函数.

地图实现如下:

if (!com) var com = {}
if (!com.example) {
    com.example= {
       myFunction: function(data) {

      // some code here

    }
  }
}
Run Code Online (Sandbox Code Playgroud)

我搜索了解语法但没有成功,有人可以向我解释一下是什么!com意思吗?如果变量尚未声明,我们如何检查它?

jfr*_*d00 5

if (!com)检查是否com是一个falsey值. if (com)检查它是否是一个真正的值,以便您可以看到!反转测试.

在您的特定代码示例中:

if (!com) var com = {};
Run Code Online (Sandbox Code Playgroud)

代码正在检查com变量是否已定义并初始化.如果尚未初始化,则它的值将undefined是一个假值,这将导致此代码初始化它.

在Javascript中,有许多falsey值,并且undefined是一个这样的假值.假名值是:

null
""
false
NaN
0
undefined
Run Code Online (Sandbox Code Playgroud)

有关falsey/truthy的更多信息,请参阅此文章.


您必须注意的一件事是,if (com)或者if (!com)在某些情况下可能会导致引用错误.测试变量是否已定义和初始化的最安全方法是:

if (typeof com === "undefined")
Run Code Online (Sandbox Code Playgroud)

因为这不会在任何情况下导致错误.

或者,命名空间的常见设计模式是:

var com = com || {};
Run Code Online (Sandbox Code Playgroud)

这将定义并初始化com为命名空间对象(如果它尚不存在,具有真值).