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


当前回答

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

[undefined, null].includes(value)

其他回答

如果If语句的目的是在将值赋给变量之前检查null值或未定义值,则可以使用Nullish Coalescing Operator。根据caniuse的数据,大约85%的浏览器应该支持它(截至2021年1月)。该运算符的示例如下所示:

const a = some_variable ?? '';

这将确保如果some_variable为null或未定义,该变量将被分配给空字符串(或任何其他默认值)。

此操作符最适合您的用例,因为它不会为其他类型的假值(如0和”)返回默认值。

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

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

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

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

这是唯一需要使用==和!=的情况:

if (val == null) console.log('val is null or undefined')
if (val != null) console.log('val is neither null nor undefined')

对于任何其他比较,应该使用严格比较符(===和!==)。

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Equality_comparisons_and_sameness https://2ality.com/2011/12/strict-equality-exemptions.html

你可以检查变量是否有值。的含义,

if( myVariable ) {
//mayVariable is not :
//null
//undefined
//NaN
//empty string ("")
//0
//false

}

如果您不知道一个变量是否存在(也就是说,它是否声明过),您应该使用typeof操作符进行检查。如。

if( typeof myVariable !== 'undefined' ) {
    // myVariable will get resolved and it is defined
}