Javascript for ..有时通过不存在的属性
Javascript for...in sometimes goes through unexisted attribute
有时当我调用这个对象的方法时,我得到"哎呀"错误,因为"i"指的是不存在的属性。怎么可能?
m.derp();
m.herp(); // Sometimes throws error
方法:
this.movements = new Array();
this.herp = function() {
for (var i in this.movements) {
if (!(this.movements[i] instanceof Movement)) {
throw new Error("Oops"); // this.movements[i] is undefined
}
}
}
this.derp = function() {
var newArray = new Array();
for (var i in this.movements) {
if (!this.movements[i].isFinished()) {
newArray.push(this.movements[i]);
}
}
this.movements = newArray;
}
对于数组,不应使用 for-in
.它是一个通用枚举器,包括所有可枚举的属性,包括通过原型继承的属性。
你应该这样做...
for (var i = 0; i < this.movements.length; i++) {
使用 for-in
时,将遇到添加到Array.prototype
或Object.prototype
的任何属性。
如果只需要数字索引,则 for
语句是正确的语句。。除非在某些狭窄的情况下,如T.J. Crowder在下面指出的那样。
您不应该使用 for in 来迭代数组,因为实际上您正在迭代数组对象的每个属性,以及继承的属性(我不确定是否有)。 使用简单循环:
for(var i = 0; i < arr.length; i++){
}
通常你不应该将for-in
用于数组 - 该结构更适合在对象上使用。使用传统的for
循环:
for (var i=0, len=this.movements.length; i<len; i++) //do stuff...
有关为什么会这样的更多信息,请参阅此问题。
相关文章:
- 查找数组's按属性不存在于另一个数组中的对象
- 错误 TS2339:类型“{}”上不存在属性“forEach”
- Express和Typescript-Error.stack和Error.status属性不存在
- 在'用于'如果javascript中不存在对象属性,则循环
- Realm React Native-需要迁移:目标类型'字符串'不会'不存在于属性'电
- 有没有一个lodash函数可以合并两个对象并删除其中一个对象的属性(如果它们没有)'不存在于另一个中
- Javascript:当属性可能不存在时,在对象中使用OR条件
- Javascript for ..有时通过不存在的属性
- 如何在访问 JavaScript 对象的不存在属性时抛出错误
- TypeScript 工厂模式说属性不存在
- 如果属性不存在,则不显示对象的数据
- 错误“属性'日期选择器'在带有打字稿的类型'IAugmentedJQuery'上不存在
- 将不存在的属性的引用分配给变量
- 为什么在 JavaScript 中引用对象的不存在属性不会返回引用错误
- 打字稿 - 为什么猫鼬中不存在“方法”属性
- 可以按不存在的属性对数组进行角度过滤
- 属性在打字稿接口上不存在
- Spring复选框选中的属性不存在
- 解决打字错误的最佳方法-类型上不存在属性
- TypeScript - 类型“节点”上不存在属性“id”