【问题标题】:JavaScript only logs undefined's that you define? [duplicate]JavaScript 只记录你定义的未定义的? [复制]
【发布时间】:2016-11-29 22:19:43
【问题描述】:

运行此代码时,我希望它记录 5 个undefined。但是我只看到两个。 JavaScript 似乎只记录您自己定义的undefined

var a = [];
a[0]=undefined;
a[4]=undefined;
a.forEach((i)=>console.log(i))

此日志:

undefined
undefined

您不希望它记录 4 个undefined 吗?

这是codepen

【问题讨论】:

  • .forEach 仅遍历数组中的值。您not 设置为undefined 的索引实际上并不是未定义的,而是空的。不过,Chrome 会将它们报告为未定义,只是为了混淆视听。
  • for 循环按预期工作
  • 如果你登录a[1],你会得到undefined

标签: javascript


【解决方案1】:

引用 mdn:

forEach 方法为数组中存在的每个元素按升序执行一次提供的回调。它不会为已删除或未初始化的索引属性调用(即在像您的示例这样的稀疏数组上),

据我所知,lo-dash forEach 方法与您预期的不同。

【讨论】:

    【解决方案2】:

    这是因为forEach循环。

    forEach() 为数组中的每个元素按升序执行一次提供的回调。它不会为已删除或未初始化的索引属性调用(即在稀疏数组上)。

    --来源MDN

    示例代码段:

    var a = [];
    a[0] = undefined;
    a[4] = undefined;
    a.forEach(function(i) {
      console.log(i)
    })
    
    
    for (var i = 0; i < a.length; i++) {
      console.log(a[i] + " from for loop");
    }

    【讨论】:

      【解决方案3】:

      所以 javascripts 数组基本上只是具有整数键的特殊对象(有一些细微差别)。所以你定义了一个有 2 个键值的对象。 0:未定义,3:未定义。因为数组中只有 2 个东西,所以它只打印 2 个未定义。

      【讨论】:

      • undefineds: 我最喜欢的新词
      猜你喜欢
      • 2014-09-03
      • 2013-09-13
      • 2021-06-14
      • 2023-01-17
      • 2010-10-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多