Eam*_*nne 6 javascript foreach associative-array
javascript for关键字将遍历对象的所有属性.如果在循环体内修改了对象,会发生什么?
例如,以下代码是否正常?
for(var key in obj)
if (whatever(obj[key]))
delete obj[key];
Run Code Online (Sandbox Code Playgroud)
如果此代码以确定的方式工作,并且最好所有密钥obj都只测试一次,那就OK .相比之下,在.NET或Java中,类似的构造通常会抛出异常.
我认为它有效.请小心要求hasOwnProperty(key)- 因为for也会愉快地迭代继承的属性(和方法,它们只是具有函数值的属性).
另外:http://www.w3schools.com/js/js_loop_for_in.asp说:
注意:for ... in循环体中的代码对每个属性执行一次.
另外:https://developer.mozilla.org/en/JavaScript/Reference/Statements/for...in说:
for ... in循环以任意顺序迭代对象的属性(有关为什么不能依赖于迭代的看似有序性的原因,请参阅delete运算符,至少在跨浏览器设置中).如果在一次迭代中修改属性,然后在稍后访问该属性,则循环公开的值将是其稍后的值.在访问之前删除的属性将不会在以后访问.添加到正在进行迭代的对象的属性可以在迭代中被访问或省略.通常,除了当前正在访问的属性之外,最好不要在迭代期间添加,修改或删除对象的属性; 无法保证是否会访问添加的属性,是否在修改之前或之后访问已修改的属性,或者删除之前是否将访问已删除的属性.
我从中读到的是 - 如果你正在修改当前值以外的其他值,那么非确定性可能会让你陷入困境.但是,修改当前的应该没问题.