0

我理解您为什么要在 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
    }
}

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

4

1 回答 1

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"){ ... }
于 2013-08-03T21:03:30.597 回答