语法:
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.如果是引擎内置对象属性和继承属性
var ob = {};
console.log(ob.propertyIsEnumerable(‘keys‘));//false keys-->来自Object构造函数 console.log(ob.propertyIsEnumerable(‘constructor‘));//false constructor-->来自Object原型对象属性
用for in遍历一下ob对象,结果为空.
3.如果是自定义类型的情况
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自身的属性。
4.如果是动态增加Object方法
var obj = {}; Object.prototype.Color = ‘green‘; console.log(obj.propertyIsEnumerable(‘Color‘));//false
用for in遍历一下obj对象,结果为空。
综上所述:如果属性不是自身属性,而是继承属性,返回false;如果此自身属性不可枚举,也就是说此属性为引擎内置属性,也返回false;其余返回true。
时间: 2024-10-11 11:31:30