枚举属性 Enumerating Properties

有时候我们需要遍历或枚举对象的属性,我们可以使用for-in循环

function Circle(radius) {
  this.raadius = radius;
  this.draw = function() { 
    console.log('draw');
  }
}
const circle = new Circle(10);
for (let key in circle) {
  console.log(key,circle[key]);
  //radius  10
  //draw  f() { console.log('draw');}
}

在每次遍历的过程中,key都代表一个键值对的key,我们可以看到不管是属性还是方法都被返回了。如果我们只想得到属性而不得到方法怎么做?
我们可以使用typeof操作符类检测值的类型:

for (let key in circle) {
  if (typeof circle[key] !== 'function')
    console.log(key,circle[key]);
    //radius  10
}

这样我们就只获得了属性的值。
也有另一种得到对象中所有key的方法:

const keys = Object.keys(circle);
console.log(keys);//["radius","draw"]

Object对象有一个Keys方法,我们可以传入circle对象,方法会使数组返回传入对象的所有键。但是以这种方式我们无法区分属性和方法。
最后,如果我们想知道一个对象中有没有某个给定的属性,可以使用in操作符:

if ('radius' in circle)
  console.log('Circle has a radius.');//Circle has a radius.

你可能感兴趣的:(枚举属性 Enumerating Properties)