有时候我们需要遍历或枚举对象的属性,我们可以使用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.
网友评论