如何在js中检查null和undefined?

6
在JavaScript中是否可能同时检查null和undefined?
if(_var == null || _var == undefined) {

}

1
我会交换这两个表达式,但是它应该能正常工作。 - Felix Kling
1
如果_var是未定义的,那么_var == undefined表达式将永远不会被执行,因为_var == null进行类型强制转换,正如Pim在下面所指出的,而且undefined == null返回true_var == null也将测试undefined,但我认为依赖于类型强制转换通常是不推荐的。 - Daniel Vassallo
5个回答

6
在 JavaScript ( ECMAScript 5 前),undefined 不是一个常量,而是一个全局变量,因此可以更改其值。因此,使用 typeof 运算符来检查 undefined 会更可靠:
if (typeof _var === 'undefined') { }

此外,如果变量_var未声明,则您的表达式将返回ReferenceError。但是,您仍然可以使用上面显示的typeof运算符进行测试。
因此,您可能更喜欢使用以下内容:
if (typeof _var === 'undefined' || _var === null) { }

1
你的第一个情况有点冒险,因为“_var”可能被设置为除了null以外的其他falsy值。 - Peter Jaric
@snowlord:没错,我已经把那部分删除了。 - Daniel Vassallo
2
幸运的是,现在在ECMAScript 5中,undefined是全局对象的一个属性,它是不可写的、不可配置的(不可删除)和不可枚举的 :) - Christian C. Salvadó

4

是的

然而,使用==运算符并不是必要的。如果foo未定义,则使用foo == null也将为真。但请注意,undefined和null并不相同。这是因为==执行类型转换,导致foo == null对于foo未定义也为真。


+1,这是实现它的最短方式,并且在规范中完全描述:抽象相等比较算法(无需担心类型强制转换)... if (_var == null) { ... } - Christian C. Salvadó

1
if (!_var) {
    // Code here.
}

这应该可以工作,因为undefinednull都被类型强制转换为false

当然,如果_var实际上是false,那么就会有小问题,但它仍然可以工作,因为在大多数情况下,您想知道的是_var不是true而且不是一个对象。


4
请注意,JavaScript 中除了 falsenullundefined 之外还有三个其他的假值:空字符串 ""0NaN。将其翻译为中文:请注意,JavaScript 中除了 falsenullundefined 之外还有三个其他的 falsy 值:一个空字符串 ""0NaN - Daniel Vassallo

0
var valuea: number;
var valueb: number = null;

function check(x, name) {
    if (x == null) {
        console.log(name + ' == null');
    }

    if (x === null) {
        console.log(name + ' === null');
    }

    if (typeof x === 'undefined') {
        console.log(name + ' is undefined');
    }
}

check(a, 'a');
check(b, 'b');

0
你还可以在MooTools中使用$defined函数(在jQuery中一定也有相应的等价函数)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接