语法:
obj.propertyIsEnumerable(prop);
此方法返回一个布尔值,表明指定的属性名是否是当前对象可枚举的自身属性。
1.如果是用户自定义了对象的属性,将返回true,比如
var o = {}; o.prop = '我是个可枚举属性'; o.fn = function(){}; //用户自定义属性 console.log(o.propertyIsEnumerable('prop'));//true console.log(o.propertyIsEnumerable('fn'));//true
用for in遍历一下o对象,结果为:
for(var property in o){
console.log(property);
}
//prop fn
2.如果是自定义类型的情况
function Dog(name){ this.name = name; } Dog.prototype.sayName = function(){ var some = this.name; } var dog = new Dog('huang'); console.log(dog.propertyIsEnumerable('name')); //true 'name'-->来自Dog类型的构造函数 console.log(dog.propertyIsEnumerable('sayName'));//false 'sayName'-->继承自Dog类型
用for in 遍历一下dog对象,结果为:
for(var property in dog){ console.log(property); }//name sayName
sayName能遍历出来,但是他不是dog自身的属性。
3.如果是内置对象属性或者是继承属性
var ob = {};
console.log(Math.propertyIsEnumerable('random'));//false 内置属性
console.log(window.propertyIsEnumerable('name'));//true 内置属性 console.log(ob.propertyIsEnumerable('constructor'));//false constructor-->继承Object原型对象属性
4.如果是动态增加Object原型对象属性
var obj = {}; Object.prototype.Color = 'green'; console.log(obj.propertyIsEnumerable('Color'));//false
Color是继承的属性,所以为false。