JavaScript——for…… in……循环性能问题

问题:

使用for……in……循环会遍历原型链所有的可枚举属性,如果你的目的不是需要所有属性,会造成不必要的循环

const div =document.createElement('div')
let m =0
for (let k in div){
    m++
} 
console.log(m) //235
console.log(Object.keys(div).length)  //0

优化:

除了用for……in……可以获取 obj 中的 key 值,还可以使用 Object.key() 获取,Object.getOwnPropertyNames() 以及Reflect.ownKeys() 也可以获取,for……in…… 循环:会遍历对象自身的属性以及原形属性,for……in…… 循环只遍历可枚举属性(不包括 enumerable 为 false 的属性)。像 Array 和 Object 使用内置构造函数所创造的对象会继承自Object.prototype 和String.prototype 的不可枚举属性

const parent = {
  a: 1,
  b: 2,
  c: 3
};
const child = {
  d: 4,
  e: 5,
  [Symbol()]: 6
};
child.__proto__ = parent;
Object.defineProperty(child, "d", { enumerable: false });//设置child对象中的d属性为不可枚举
for (var attr in child) {
  console.log("for...in:", attr);// a,b,c,e
}
console.log("Object.keys:", Object.keys(child));// [ 'e' ]
console.log("Object.getOwnPropertyNames:", Object.getOwnPropertyNames(child)); // [ 'd', 'e' ]
console.log("Reflect.ownKeys:", Reflect.ownKeys(child)); // [ 'd', 'e', Symbol() ]

猜你喜欢

转载自blog.csdn.net/YUHUI01/article/details/82817816