javascript - 为什么不建议将 JavaScript 的 For...In 循环用于数组?

标签 javascript for-in-loop

<分区>

我在某处读到(抱歉,我找不到链接),不建议对数组使用 For...In 循环。这里说:http://www.openjs.com/articles/for_loop.php它适用于关联数组,并且在 http://www.w3schools.com/js/js_loop_for_in.asp 中那是为了遍历一个对象的所有属性(它并没有说它可以用在数组上)。我不知道该相信谁。我不希望这个问题成为一场辩论。我只想知道我是否可以在我的代码中使用它而不会产生不可预见的副作用。谢谢!

最佳答案

数组是一个对象,数组元素只是将数字索引转换为字符串的属性。例如,arr[123] 引用数组对象 arr 中的属性“123”。

for ... in 构造适用于所有对象,而不仅仅是数组,这是造成混淆的原因。

当某人 for ... in 一个数组时,程序员通常打算只迭代所有元素,甚至最有可能 < em>按顺序。例如,如果数组包含一堆数字,那么程序员很可能打算迭代一串数字。语义与其他编程语言中的数组迭代非常相似,很容易混淆。

在 JavaScript 中,此构造不会按顺序迭代数组元素。它迭代数组的所有属性名称(包括继承原型(prototype)函数的名称、添加到它的任何属性、添加到它的任何其他非元素属性等),并且不按顺序所有。在早期的浏览器中,它甚至会找到属性 length,尽管在​​最近的浏览器中,这些属性现在被定义为隐藏正是出于这个原因——人们总是被它绊倒!

使用上面的整数数组,您得到的不是数字流,而是文本字符串流。不是元素值,而是属性的名称(只是数字索引,没有任何顺序)。这很可能不是程序员的意思,如果他/她来自另一种编程语言。如果存储在数组中的元素恰好是相似的数值,它会把每个人都弄糊涂。

这就是为什么你不应该这样做。您不应该使用一种语言结构,它看起来像是在做显而易见的事情,但实际上却在做完全不同的事情。它会产生非常隐蔽且很难发现的错误。

关于javascript - 为什么不建议将 JavaScript 的 For...In 循环用于数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5269757/

相关文章:

javascript - 绘制原型(prototype)链

javascript - jQuery:将 JavaScript 移动到页面底部?

ios - 遍历数组并在 Swift 中增加计数器

for-loop - awk for-in 循环给出意外的输出?

javascript - javascript : cipher broken 中的凯撒密码

Javascript 使用 for-in 循环迭代器设置变量

javascript - 遍历 String.prototype

javascript - 第二个计算函数导致 Knockout 代码出错

javascript - 从 javascript 执行 python 脚本

javascript - AJAX 请求工作正常,但是当我单击按钮内的图标时,出现 500 内部服务器错误