【问题标题】:Prevent error "is undefined" in if statement [duplicate]在 if 语句中防止错误“未定义”[重复]
【发布时间】:2016-07-15 17:10:27
【问题描述】:

我的问题是关于更有效地防止“变量未定义”错误。

例如

如果我使用以下代码:

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

它会正常工作的。但是,我能用吗

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

如果array 未定义,则不会出现“变量未定义”错误?

(我现在不能在我的代码中准确地测试这个,因为我正在构建一个客户端-服务器应用程序,我必须改变很多行来尝试它,所以我在这里问它。我'如果不合适,请见谅)

【问题讨论】:

  • 大多数(全部?)浏览器都有一个控制台,您可以使用它来运行 javascript 并在页面上对其进行测试(只需按 F12 并单击控制台)。如果您需要测试想法,也可以使用CodePen.ioJSFiddle.net。对于这种情况,您只需定义一个新变量,运行它,看看会发生什么。例如...var tmp = []; if(tmp[0] != undefined && tmp[0].id == 1) { alert("In if!") } else { alert("Skipping block.") }

标签: javascript arrays node.js undefined


【解决方案1】:

如果您必须检查数组本身是否未定义,那么您还必须检查 typeof 数组。像这样的:

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

【讨论】:

    【解决方案2】:

    只有当if 的括号内的所有条件都为真时,if 才会返回真。

    如果任何一个表达式被评估为假,则整个表达式被评估为假。

    【讨论】:

      【解决方案3】:

      不,如果数组未定义,您将需要一个看起来像这样的 if 语句:

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

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

      【讨论】:

        【解决方案4】:

        只有当 (a && b) ab 的值都是真值时,&& 才会返回真值。

        如果第一个操作数(expression) 被评估为false,则根本不评估第二个操作数(expression),因为结果总是false

        【讨论】:

        【解决方案5】:

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

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

        记得检查字符串 'undefined' 而不是原始值。

        更多信息MDN

        【讨论】:

          【解决方案6】:

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

          【讨论】:

            猜你喜欢
            • 2015-03-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2018-09-26
            • 2018-08-25
            • 1970-01-01
            • 2017-11-21
            • 1970-01-01
            相关资源
            最近更新 更多