for i of foo 正在返回额外的键?
我在一个包含 3 个对象的数组上调用它。除了这些额外的键之外,它最终还会返回正确的键...... <代码> 独特的 最后的 截短 随机的 包括 包含 任何 为什么
?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
我在一个包含 3 个对象的数组上调用它。除了这些额外的键之外,它最终还会返回正确的键...... <代码> 独特的 最后的 截短 随机的 包括 包含 任何 为什么
?
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(2)
您之所以获得这些额外的属性,是因为您或您正在使用的库扩展了
Array
原型。正如迈克在他的回答中指出的那样,您可以使用hasOwnProperty
跳过这些内容。事实上,CoffeeScript 有一个内置的own
关键字可以为您完成此操作:但是,正如 Mike 在他的回答中指出的那样,通过递增计数器来循环数组比迭代数组更有效。键。为此,您可以使用 CoffeeScript 的
for...in
语法:(如果您还需要循环中的索引,您可以编写
for obj, i in foo
.)You're getting those extra properties because you, or a library you're using, has extended the
Array
prototype. As Mike points out in his answer, you can skip those by usinghasOwnProperty
. Indeed, CoffeeScript has anown
keyword built in that does this for you:But, as Mike also points out in his answer, it's more efficient to loop through an array by incrementing a counter rather than iterating over the keys. To do that, you'd use CoffeeScript's
for...in
syntax:(If you need indices in the loop as well, you can write
for obj, i in foo
.)for (... in ...)
将返回对象原型上的内容。请参阅 JavaScript for...in vs for最好的解决方案是迭代使用索引循环的数组元素
这具有获取数字键而不是字符串并可靠地按顺序迭代的优点。
或者,您可以使用
hasOwnProperty
确保您不会从原型中获取密钥。或者如果您担心
hasOwnProperty
被覆盖,则可以使用变体。或者,您可以使用 enumerable: false ="nofollow noreferrer">
Object.defineProperty
。for (... in ...)
will return things on the object's prototype. See JavaScript for...in vs forThe best solution is to iterate over array elements using an index loop
This has the benefit of getting a numeric key instead of a string and reliably iterating in order.
Alternatively, you can use
hasOwnProperty
to make sure you don't get keys from the prototype.or a variation if you're worried about
hasOwnProperty
being a overridden.Even more alternatively, you can define these prototype properties as
enumerable: false
usingObject.defineProperty
.