关于javascript:在if语句中防止错误“未定义”

Prevent error “is undefined” in if statement

本问题已经有最佳答案,请猛点这里访问。

我的问题是更有效地防止"变量未定义"错误。

例如

如果我使用以下代码:

1
2
3
4
5
6
7
if (array[index] != undefined)
{
  if (array[index].id == 1)
  {
    // code
  }
}

它会很好用的。但是,我能用吗

1
2
3
4
if (array[index] != undefined && array[index].id == 1)
{
 // code
}

如果没有得到"变量未定义"的错误,那么如果array未定义?

(我现在不能在我的代码中准确地测试这个,因为我正在构建一个客户机-服务器应用程序,我需要修改很多行来尝试它,所以我在这里问它。如果不合适,我很抱歉)


&& will return true only if both the values of (a && b) a and b are truthy values.

如果第一个操作数(expression被计算为false,则第二个操作数(expression根本不被计算,因为结果总是false的结果。


使用typeof评估未定义变量的更好做法是:

1
2
3
4
if ( typeof array[index] !== 'undefined' && array[index].id == 1)
{
   // code
}

记住要检查字符串"未定义"而不是基元值。

MDN中的更多信息


如果必须检查数组本身是否未定义,则必须同时检查其中的typeof数组。像这样:

1
2
3
4
5
6
if(typeof array !== 'undefined'){
    if ( typeof array[index] !== 'undefined' && array[index].id == 1)
    {
       // code
    }
}

只有当if的偏执中的所有条件都是真的,if才会返回真。

如果任何一个表达式的计算结果为假,则整个表达式的计算结果为假。


不,如果数组未定义,则需要一个如下所示的if语句:

1
2
3
if (array && array[index] !== undefined && array[index].id === 1) {
   // do things
}

第一个条件,如果为false,将停止对所有其他条件的评估。唯一失败的方法是,如果您在严格模式下运行代码,并且从未声明var array


是的,如果第一个条件失败,它将短路并忽略其他条件,就像任何语言一样。