是否有更短的方法来测试变量是否已声明且不为null?

时间:2013-08-03 20:30:51

标签: javascript

我理解你为什么要在javascript中测试null和undefined:

var declared;
...
if ('undefined' !== typeof declared && null !== declared) {
    // do something with declared
}

function doSomethingWithDefined(defined) {
    if ('undefined' !== typeof declared && null !== declared) {
        // do something with declared
    }
}

有没有办法缩短这个陈述?这是非常冗长的模式。

1 个答案:

答案 0 :(得分:3)

如果你定义一个这样的变量:

var defined;

它没有值,但是你没有得到ReferenceError,因为引用存在。它只是没有引用任何东西。因此,以下内容有效。

if (defined != null) { ... }

对于函数,例如

function doSomethingWithDefined(defined) {
    if (defined != null) { ... }
}

可以翻译为:

function doSomethingWithDefined() {
    var defined = arguments[0];
    if (defined != null) { ... }
}

因为变量是隐式声明的(但不一定是定义的),所以你可以这样做而不会得到异常,因此不需要typeof

doSomethingWithDefined("value"); // passes defined != null
doSomethingWithDefined(); // defined == null, but no exception is thrown

当您不确定是否已声明变量时,通常会使用typeof运算符。但是,有一种替代方案适用于所有现实场景。

if (window.myvariable != null) {
    // do something
}

因为全局变量是你应该关注的唯一非参数变量,使用属性访问我们也可以避免异常。


那就是说,我强烈建议进行类型检查,而不是键入避免。要积极!

是字符串吗?

if (typeof declared === "string"){ ... }

是阵列吗?

if (typeof declared === "object" && declared.length != null){ ... }

它是非数组对象吗?

if (typeof declared === "object" && declared.length == null){ ... }

这是一个功能吗?

if (typeof declared === "function"){ ... }