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意思吗?如果变量尚未声明,我们如何检查它?
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为命名空间对象(如果它尚不存在,具有真值).