我们经常在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标准比较undefined或null或0的最佳方法

 if ((Boolean(some_variable_1) && Boolean(some_variable_2)) === false) {
    // do something
    }

其他回答

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

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

如果您试图引用一个未声明的变量,那么在所有JavaScript实现中都会抛出一个错误。

对象的属性不受相同条件的约束。如果未定义对象属性,则在尝试访问它时不会抛出错误。在这种情况下,你可以缩短:

 if (typeof(myObj.some_property) != "undefined" && myObj.some_property != null)

to

if (myObj.some_property != null)

考虑到这一点,以及全局变量可以作为全局对象(浏览器中的窗口)的属性访问的事实,你可以对全局变量使用以下方法:

if (window.some_variable != null) {
    // Do something with some_variable
}

在局部作用域中,确保变量在代码块的顶部声明总是有用的,这将节省重复使用typeof。

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

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

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

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

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

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

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

为了理解,让我们分析一下Javascript引擎在转换undefined、null和”(也是一个空字符串)时返回的值是什么。您可以直接在开发人员控制台检查相同的内容。

你可以看到所有都被转换为false,这意味着所有这三个都是通过javascript假设“缺乏存在”。因此,您不需要像下面这样显式地检查代码中的所有三个。

if (a === undefined || a === null || a==='') {
    console.log("Nothing");
} else {
    console.log("Something");
}

我还想指出一件事。

布尔(0)的结果是什么?

当然是假的。当0是预期结果中的有效值时,这将在代码中创建一个错误。所以在写代码的时候一定要检查这个。