Spe*_*rds 4 javascript for-loop object for-in-loop for-of-loop
因此,当我使用for..in循环迭代对象键时,我的IDE不喜欢.我收到警告:
可能对意外(自定义/继承)成员进行迭代,可能缺少hasOwnProperty检查
所以我得到它所说的,所以在这种情况下,最好是使用类似的东西for (const key of Object.keys(obj))而不是for (const key in obj)?
性能方面,两者之间是否存在真正的差异?
Chr*_*tos 10
通过Object.keys数组循环和使用for...in语句循环之间存在细微差别,在大多数情况下不会注意到.Object.keys(obj)只返回一个具有该对象自身属性的数组,同时for...in返回原型链中找到的键,以便后者对原型进行额外检查obj,然后再对原型的原型进行检查.等等,直到整个原型链被访问.这肯定使第二种方法的效率低于第一种方法,但正如我已经提到的,在大多数情况下很难注意到这种差异.
对于更正式的方法,正如MDN中所述:
Object.keys()方法返回给定对象自己的可枚举属性的数组,其顺序与for ... in循环提供的顺序相同(不同之处在于for-in循环枚举原型链中的属性为好).
您仍然可以使用for(var key in obj){}. 看起来它期待在循环Object.hasOwnProperty内for..in
这是因为for..in即使密钥在原型链中,也会查看原型链并返回 true。
而Object.hasOwnProperty只有当 key 是它的属性时才会返回 true owns。
你可以这样做
for(var key in obj){
if(obj.hasOwnProperty(key)){
// rest of code}
}
Run Code Online (Sandbox Code Playgroud)