jQuery是否以更简洁的方式提供了一种测试方法?
更新 我本应该离开jQuery了。这只是一个JavaScript问题。这对我来说太久了!我正在测试是否有外部定义的模块已加载或未加载。我似乎可以使用它来代替:
if (window.someVar)
如果这是一种不好的做法,请纠正我。在我的例子中,如果定义了someVar,它将是一个对象。它不会被定义为错误。
答案 0 :(得分:6)
这个答案必须至少30个字符,答案是:否。
答案 1 :(得分:1)
如果您的代码可以接受null
和undefined
相等,则可以通过对typeof
进行==
测试来避免null
},true
也是undefined
。
if( someVar == null ) {
// it was either null or undefined
}
答案 2 :(得分:1)
(function(params, undefined) {
// ...
if (someVar === undefined) {
...
}
...
window.SomethingGlobal = SomethingGlobal;
}(params));
您可以将声明undefined
设置为函数中的变量。如果没有传递该参数,那么您可以保证其值为undefined
。
最好使用这样的闭包创建一个独特的范围。如果您需要将任何东西提升到全局范围,请手动将其设置在窗口上。
或者这可行:
if (someVar = void 0) {
...
}
void
是一个有趣的命令。它需要一个表达式,它运行表达式并始终返回undefined
而不是表达式的return value
。
答案 3 :(得分:0)
没有真正的方法可以让它更简洁。由于该代码测试是否声明了变量someVar
,因此唯一安全使用名称someVar
作为typeof
的操作数(如果变量不是,则所有其他用途都会引发错误声明)。
我猜你可以通过使用函数使表达式的其余部分更短一些:
function isUndefined(type)
{
return type === 'undefined';
}
if (isUndefined(typeof someVar)) {
// ...
}
但这可能不值得这么麻烦。
答案 4 :(得分:0)
只要typeof
的'大变异'包含像object
这样的'天才'*你可以考虑这个作弊:
typeof someVar >= 'u'
ndefine
会加快字符串比较,但会降低代码的可读性和清晰度。
然而简短就是美化,也许提醒一下,有一些像>=
和=<
- 操作符这样的东西经常被遗忘而不被使用。 ;)