我们经常在JavaScript代码中使用以下代码模式

if (typeof(some_variable) != 'undefined' && some_variable != null)
{
    // Do something with some_variable
}

是否有一种不那么冗长的检查方法具有相同的效果?

根据一些论坛和文献,简单地说下面应该有同样的效果。

if (some_variable)
{
    // Do something with some_variable
}

不幸的是,当some_variable未定义时,Firebug在运行时将这样的语句计算为错误,而第一个语句对它来说很好。这仅仅是Firebug的一种(不必要的)行为,还是这两种方式之间真的有一些区别?


当前回答

你必须定义一个这样的函数:

validate = function(some_variable){
    return(typeof(some_variable) != 'undefined' && some_variable != null)
}

其他回答

测试空值(if (value == null))或非空值(if (value != null))比测试变量的定义状态更简洁。

此外,测试if(value)(或if(obj.property))以确保变量(或对象属性)存在失败,如果它定义为布尔值为false。买者自负。

下面是另一种使用Array includes()方法的方法:

[undefined, null].includes(value)

这是一个非常罕见的例子,建议使用==而不是===。表达式somevar == null对于undefined和null将返回true,但对于其他所有内容将返回false(如果变量未声明则会出现错误)。

如预期的那样,使用!=将翻转结果。

现代编辑器不会对使用==或!=操作符加null发出警告,因为这几乎总是需要的行为。

最常见的比较:

undeffinedVar == null     // true
obj.undefinedProp == null // true
null == null              // true
0 == null                 // false
'0' == null               // false
'' == null                // false

自己试试吧:

let undefinedVar;
console.table([
    { test : undefinedVar,     result: undefinedVar     == null },
    { test : {}.undefinedProp, result: {}.undefinedProp == null },
    { test : null,             result: null             == null },
    { test : false,            result: false            == null },
    { test : 0,                result: 0                == null },
    { test : '',               result: ''               == null },
    { test : '0',              result: '0'              == null },
]);

在ES5和ES6等较新的JavaScript标准中,你只需说

> Boolean(0) //false
> Boolean(null)  //false
> Boolean(undefined) //false

所有返回false,这类似于Python检查空变量。 所以如果你想写一个变量的条件逻辑,就说

if (Boolean(myvar)){
   // Do something
}

这里“null”或“空字符串”或“undefined”将被有效地处理。

您可以使用lodash库。

_.isNil(value)对于null和undefined都给出true

测试地址:https://bazinga.tools/lodash