有人可以解释一下这里发生了什么以及如何解决它吗?我正在使用 JSMock,并在 spec.js
中执行以下代码:
for (var t in []) {
alert(t)
}
...导致我的浏览器警告“eachIndexForJsMock”(当它根本不应该执行alert
命令时)。这搞乱了我的 for every
循环。我该如何修复它?
最佳答案
问题是 JSMock augments the Array.prototype
object .
for-in
语句旨在用于枚举对象属性,对于数组和类数组1对象,它是始终建议使用迭代循环,例如:
for (var i = 0; i < arr.length; i++) {
//...
}
您应该避免在类似数组的对象上使用 for-in
,因为:
- 不保证迭代顺序,索引可能不会按数字顺序访问。
- 还枚举了继承的属性。
另请参阅:
[ 1 ] 我所说的类数组是指任何包含按顺序编号的属性和length
属性的对象。
关于javascript - JSMock 的奇怪问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3277662/