我们经常在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的一种(不必要的)行为,还是这两种方式之间真的有一些区别?


当前回答

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

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

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

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

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

其他回答

正如在其中一个答案中提到的,如果您谈论的是一个具有全局作用域的变量,那么您可能会很幸运。您可能知道,全局定义的变量往往会被添加到windows对象中。你可以利用这一点假设你要访问一个名为bleh的变量,只需使用双倒操作符(!!)

!!window['bleh'];

这将返回一个false,而bleh还没有被声明和赋值。

在浏览器中打开开发人员工具,并尝试如下图所示的代码。

无论yyy是undefined还是null,它都会返回true

if (typeof yyy == 'undefined' || !yyy) {
    console.log('yes');
} else {
    console.log('no');
}

yes

if (!(typeof yyy == 'undefined' || !yyy)) {
    console.log('yes');
} else {
    console.log('no');
}

no

用正常相等性检查null也将为undefined返回true。

如果窗口。变量== null)警报('变量为空或未定义');

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

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