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


当前回答

我用过这个方法

将id保存在某个变量中

var someVariable = document.getElementById("someId");

然后使用if条件

if(someVariable === ""){
 //logic
} else if(someVariable !== ""){
 //logic
}

其他回答

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

const a = some_variable ?? '';

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

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

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

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

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

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

如果您试图引用一个未声明的变量,那么在所有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。

类似于你所做的,你可以这样做

If (some_variable === undefined || some_variable === null) { 做的东西 }