我相信jQuery在模块模式中使用undefined以避免将其重新定义为意外值。我想过这样做,但每当我比较undefined时,我倾向于(总是?)使用
typeof foo === 'undefined'
这样做有什么意义:
(function (win, doc, RG, undefined)
{
// App goes here
})(window, document, typeof RGraph === 'object' ? RGraph : {});
答案 0 :(得分:1)
每当我比较未定义时,我倾向于(总是?)使用
typeof foo === 'undefined'
如果您在模块中不使用undefined
,那么将其声明为参数以确保其值是没有意义的。
但是,在“总是”之后会出现一个问号,并且您很难知道将来还有谁可能会使用您的代码,所以它仍然可能是明智的。
答案 1 :(得分:0)
有三种方法可以测试值是否为undefined
:
方法1:使用typeof
:
if (typeof value === "undefined") {
// do something
}
方法2:将其与变量undefined
:
if (value === undefined) {
// do something
}
方法3:将其与void 0
:
if (value === void 0) {
// do something
}
问:你应该使用哪一个?
答:需要考虑很多因素:
typeof
和undefined
是最好的。undefined
在缩小时最佳。undefined
和void
在大多数浏览器(尤其是Firefox和Chrome)中都处于同等水平。typeof
比其他两个慢,但在Firefox中它是最快的。typeof
是测试变量是否存在的唯一方法。基于这些因素,我会说undefined
(方法2)是最好的方法。始终存在undefined
被覆盖的问题。但是,如果您正在使用模块模式(您应该在浏览器中执行此操作),那么您可以免费获得undefined
:
(function ($, undefined) {
// you can use `undefined` safely here
}(jQuery));
因此,如果您正在使用模块模式,那么我建议您使用第二种方法。它易读,易懂,简洁。唯一的缺点是您将无法测试变量是否存在。但是,您可以随时回到typeof
。