【问题标题】:Variable becomes undefined after if statement变量在 if 语句后变为未定义
【发布时间】:2020-08-31 05:52:04
【问题描述】:

我有一个代码,我试图在数组中的第四项为零之后使用任何值

var wantA = '1120';
wantA = wantA.toString().split('');
wantA = wantA.map(Number);

if (wantA.length >= 4) {
  for (i = 3; i <= wantA.length; i++) {
    var holdb = wantA[i];
    console.log(holdb);
    if (holdb != 0) {
      console.log(holdb);
      alert('error');
    }
  }
}

然而查看console.log,变量holdb在if语句之后变为“未定义”,即使它是之前的int 0

代码不应发出警报 由于某种原因,它还运行 if 语句 console.log 两次

我是 jsfiddle 的新手,所以我希望这可行:https://jsfiddle.net/2n8rbjk0/

【问题讨论】:

  • 问题是因为您正在访问数组边界之外。另请注意,如果您要获取数组中的最后一项,只需使用pop()
  • 不会也删除最后一个元素吗?
  • 是的。如果您想获取最后一个但保留数组实体,请使用wantA[wantA.length - 1]
  • 基本上这是一个逻辑错误,你需要正确使用你的内部for循环for (i = 3; i &lt; wantA.length; i++) 不需要添加=运算符,因为我们只需要数组中的这个特定元素。

标签: javascript jquery arrays for-loop if-statement


【解决方案1】:

for (i=3; ii<wantA.length 而不是 i

您的循环基本上超出了数组中的元素数量,

例如数组中可用的索引是:0,1,2,3

您的循环适用于 3 和 4

没有索引 4,因此 holdb 变为未定义

【讨论】:

    【解决方案2】:

    i 的值为4 时显示holdb undefined 是完全有效的,因为数组中没有任何索引为4 的元素,这就是它向您显示undefined 的原因。我添加了一行可以帮助您轻松理解它。 console.log('when i=' + i + ' then holdb=' + holdb);

    但是查看 console.log 变量 holdb 变为 undefined 在 if 语句之后,即使它是 int 0 提前

    当 i=3 而不是 4 时为零

    var wantA = "1120"
    wantA = wantA.toString().split("");
    wantA = wantA.map(Number)
    
    if (wantA.length >= 4) {
      for (i = 3; i <= wantA.length; i++) {
        var holdb = wantA[i]
        console.log('when i=' + i + ' then holdb=' + holdb);
        if (holdb != 0) {
          console.log(holdb);
          alert("error");
        }
      }
    }

    【讨论】:

      【解决方案3】:

      当程序员试图访问超出数组索引容量的元素时,值undefined 作为编译器返回,以查找索引大于array.length 的数组。因此,在dynamicjavascript undefined 这样的语言中,如果你尝试访问元素,它会抛出 indexOutofBoundException 异常尝试访问元素超出范围。

      • 数组的值可以从数组访问[0-array.length-1]是范围。

      由于在您的示例中 wantA.length 为 4,所以 wantA[4] => 尝试访问第 5 个元素,即 undefined,从而产生条件 真实

      
      (function(){
      var wantA = '1120';
      wantA = wantA.toString().split('');
      wantA = wantA.map(Number);
      
      if (wantA.length >= 4) {
        for (i = 3; i < wantA.length; i++) {
          var holdb = wantA[i];
          console.log(holdb);
          if (holdb != 0) { // If (undefined!=0) => results in true therefor alert is occurred.
            console.log(holdb);
            alert('error');
          }
        }
      }
      }())
      

      【讨论】:

        【解决方案4】:

        我对你的代码做了一些修改,

        var wantA = "1120".split("").map(Number);
        
        if (wantA.length >= 4) {
          for (i = 3; i <= wantA.length; i++) {
            if (wantA[3] !== undefined) {
              console.log("holdb", wantA[3]);
            }
          }
        }
        

        【讨论】:

          猜你喜欢
          • 2017-03-21
          • 2013-09-17
          • 2023-03-19
          • 1970-01-01
          • 2023-02-10
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-10-04
          相关资源
          最近更新 更多