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


当前回答

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

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

其他回答

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

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

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

这也是一种很好的(但很啰嗦)方法:

if((someObject.someMember ?? null) === null) {
  // bladiebla
}

正在发生的事情非常清楚,很难被误解。这是非常重要的!: -)

这个使用??运营商(https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Nullish_coalescing_operator)。如果someObject的值。somember为空或未定义,则??运算符介入并将值置为空。

TBH,我喜欢这个东西的明确性,但我通常更喜欢someObject。somember == null,它更有可读性,熟练的JS开发人员可能知道这里发生了什么。

let varToCheck = "";//你必须先定义变量,否则会抛出错误 Const excluded = [null, undefined, ""]; if (!excluded.includes(varToCheck)) { //它将不是null,不是undefined,不是void字符串 console.log(“通过”); }其他{ console.log(“失败”); }

例如,我复制vladernn的答案来测试,你也可以点击按钮“复制片段来回答”来测试。

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

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

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

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

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