是否存在“if(someof someVar ==='undefined')”的jQuery构造

时间:2011-02-13 16:02:02

标签: javascript jquery

jQuery是否以更简洁的方式提供了一种测试方法?

更新 我本应该离开jQ​​uery了。这只是一个JavaScript问题。这对我来说太久了!我正在测试是否有外部定义的模块已加载或未加载。我似乎可以使用它来代替:

if (window.someVar)

如果这是一种不好的做法,请纠正我。在我的例子中,如果定义了someVar,它将是一个对象。它不会被定义为错误。

5 个答案:

答案 0 :(得分:6)

这个答案必须至少30个字符,答案是:否。

答案 1 :(得分:1)

如果您的代码可以接受nullundefined相等,则可以通过对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

会加快字符串比较,但会降低代码的可读性和清晰度。

然而简短就是美​​化,也许提醒一下,有一些像>==< - 操作符这样的东西经常被遗忘而不被使用。 ;)