编程语言
首页 > 编程语言> > javascript-for…in-进入循环之前,是否对对象进行了一次迭代评估?

javascript-for…in-进入循环之前,是否对对象进行了一次迭代评估?

作者:互联网

当我使用for … in循环时:

for(var i in object) {}

我想知道所讨论的对象是一次还是每次循环都进行求值.

我在浏览器(也在节点中)进行了快速测试,例如:

for(var i in (console.log('INIT'), [1, 2, 3, 4])) { console.log('KEY', i); }

我得到:

INIT
KEY 0
KEY 1
KEY 2
KEY 3

因此,从这些经验证据中,我可以假设确实只对它进行了一次评估.

但是,这是标准行为吗?

解决方法:

从Mozilla documentation开始,for … in循环将迭代对象本身的所有可枚举属性以及该对象从其构造函数的原型继承的属性.在被访问之前被删除的(可枚举)属性将不会在以后访问.添加到发生迭代的对象的属性可以被访问,也可以从迭代中省略.

简而言之,尽管Chrome和IE可能为for..in循环使用不同的规范,但不能保证@Amit发布的示例的结果.但是,至少删除一个元素似乎会阻止它在Chrome中访问:

var obj = { a: 1, b: 2, c: 3 };

for(var k in obj) {
  document.write(k);
  delete obj['c']; 
}

标签:language-lawyer,javascript
来源: https://codeday.me/bug/20191027/1943750.html