gpt4 book ai didi

javascript - `for/in` 循环包含奇怪的索引

转载 作者:行者123 更新时间:2023-12-03 12:30:03 25 4
gpt4 key购买 nike

我正在运行 Electron 4.0.6 和 react-scripts 3.0.1,我相信,包括 babel。我写了这段代码:

const data = [1, 2, 3]
for( const idx in data ) console.log(idx)

预期输出为:

0
1
2



实际输出为:

0
1
2
peek
last



最后两个索引映射到函数。我有一个使用 for/in 编写的大型程序循环,我对在我的每个循环中进行错误检查以确保我不会意外使用函数索引的可能性感到畏惧。

我的问题:
  • 为什么我会看到这个?
  • 我如何解决它?

  • 编辑:

    感谢大家的投入。需要明确的是,该程序曾经可以运行,直到我在新计算机上重新安装它。我以前可以用 for/in仅迭代数组中的非默认索引。我不知道为什么我不能再这样做了,我想知道是什么改变使它像现在这样工作。我是否需要安装旧版本的 react-scripts ?只需重写整个程序即可使用 of loops 也不起作用,因为我已经这样做了。我用 for/in当我需要索引时循环。

    编辑2:

    我感谢大家的帮助。感谢接受的答案,我能够追踪到 npm 包 dirty-json正在用 .peek 覆盖所有数组和 .last不将它们设置为不可枚举。我现在能够解决这个问题。

    最终编辑: dirty-json已修复,因此不应再出现此确切问题。如果您是因为类似问题来到这里,请检查您的包裹;不是 dirty-json从 0.9.0 版开始。

    最佳答案

    for-in loop迭代对象的可枚举属性。我想你想要一个 for-ofiterable 中迭代或条目, 或 forEach ,它遍历数组中的元素。

    如果您的应用中有代码修改 Array.prototype 并添加 peeklast并且不将它们标记为不可枚举,for-in 循环将看到它们。

    Normal property addition through assignment creates properties which show up during property enumeration (for...in loop or Object.keys method),



    Object.defineProperty会让你用 enumerable: false 添加这些方法(默认)。

    对于初学者,我可能只是在代码库(包括 node_modules)中搜索“peek =”,看看它是否在某个地方出现。或者查看您的依赖项列表以查找一些似乎可能是罪魁祸首的实用程序。

    关于javascript - `for/in` 循环包含奇怪的索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62161320/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com