如何在JavaScript中检查未定义或null变量?

我们经常在JavaScript代码中使用以下代码模式

if (typeof(some_variable) != 'undefined' && some_variable != null)
{
    // Do something with some_variable
}

有没有更冗长的检查方法具有相同的效果?

根据一些论坛和文献的说法,简单地讲,以下内容应具有相同的效果。

if (some_variable)
{
    // Do something with some_variable
}

不幸的是,未定义Firebug会将这样的语句评估为运行时错误some_variable,而第一个语句就可以了。这仅仅是Firebug的一种(有害的)行为,还是这两种方式之间确实存在某些区别?

阳光十三2020/03/12 18:08:12

在ES5或ES6中,如果需要多次检查,可以执行以下操作:

const excluded = [null, undefined, ''];

if (!exluded.includes(varToCheck) {
  // it will bee not null, not undefined and not void string
}

Sam斯丁2020/03/12 18:08:12

使用R.isNil(yourValue) Ramda ,您可以简单地使Lodash和其他帮助程序库具有相同的功能。

西里阳光2020/03/12 18:08:12

测试null(if (value == null))或non-nullity(if (value != null))的详细程度要比测试变量的定义状态少。

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

小小JinJin蛋蛋2020/03/12 18:08:12

使用严格的比较运算符可以轻松地区分这两个值:

工作示例位于:

http://www.thesstech.com/tryme?filename=nulland未定义

样例代码:

function compare(){
    var a = null; //variable assigned null value
    var b;  // undefined
    if (a === b){
        document.write("a and b have same datatype.");
    }
    else{
        document.write("a and b have different datatype.");
    }   
}
前端MandyJinJin2020/03/12 18:08:12

与您拥有的类似,您可以执行类似的操作

if (some_variable === undefined || some_variable === null) { do stuff }

Eva凯2020/03/12 18:08:12

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

图1 图2

泡芙Pro2020/03/12 18:08:12

为了理解,让我们分析一下Javascript引擎在转换undefined,null和''(也为空字符串)时返回的值。您可以直接在开发人员控制台上进行检查。

在此处输入图片说明

您可以看到所有这些都将转换为false,这意味着这三者都被javascript假设为“不存在”。因此,您无需像下面那样显式检查代码中的所有三个。

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

我还要指出一件事。

Boolean(0)的结果是什么?

当然是假的。当0是预期结果的有效值时,这将在代码中创建错误。因此,请确保在编写代码时进行检查。

2020/03/12 18:08:12

我已经用这种方法做到了

将ID保存在某个变量中

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

然后使用if条件

if(someVariable === ""){
 //logic
} else if(someVariable !== ""){
 //logic
}
Itachi伽罗2020/03/12 18:08:11

由于没有一个完整而正确的答案,因此我将尝试总结一下:

通常,表达式为:

if (typeof(variable) != "undefined" && variable != null)

无法简化,因为variable可能未声明,因此省略typeof(variable) != "undefined"将导致ReferenceError。但是,您可以根据上下文简化表达式

如果variable全局,则可以简化为:

if (window.variable != null)

如果它是local,则可以避免未声明此变量的情况,并且还可以简化为:

if (variable != null)

如果它是object property,则不必担心ReferenceError:

if (obj.property != null)
西里米亚2020/03/12 18:08:11

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

[undefined, null].includes(value)
乐小小猪猪2020/03/12 18:08:11

如果您尝试引用未声明的变量,则所有JavaScript实现都将引发错误。

对象的属性不受相同条件的限制。如果未定义对象属性,则尝试访问它不会引发错误。因此,在这种情况下,您可以缩短:

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

if (myObj.some_property != null)

考虑到这一点,以及可以将全局变量作为全局对象的属性进行访问的事实(window对于浏览器而言),可以对全局变量使用以下内容:

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

在本地范围内,确保在代码块的顶部声明变量总是有用的,这将节省对的重复使用typeof

Near路易蛋蛋2020/03/12 18:08:11

在更新的JavaScript标准(如ES5和ES6)中,您可以说

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

全部返回false,这类似于Python对空变量的检查。因此,如果您想围绕变量编写条件逻辑,只需说

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

在这里,“空”或“空字符串”或“未定义”将得到有效处理。