JavaScript 检测枚举属性
■知识点
在大多数情况下,in运算符是探测对象中属性是否存在的最好途径,然而在某些情况下,可能希望仅当一个属性是自有属性时才检查其是否存在。in运算符会检查私有属性和原型属性,所以不得不选择 hasOwnProperty()方法。
■实例设计
for/in语句可以用来遍历一个对象中的所有属性名,该枚举过程将会列出所有的属性,包括原型属性和私有属性。很多情况下需要过滤掉一些不想要的值,如方法或原型属性。最为常用的过滤器是hasOwnPropertyO方法,或者使用typeof运算符进行排除。
for (var name in person) {
if (typeof person[name] != 'function') //排除所有方法
console.log(name+1:'+ person[name]
}
使用for/in语句枚举,属性名出现的顺序是不确定的,最好的办法就是完全避免使用for/iii语句,而是创建一个数组,在其中以正确的顺序包含属性名。通过使用for语句,可以不用担心可能出现原型属性,并且按正确的顺序取得它们的值。
var properties = ['sayName', 'first-name', 'last-name']; //使用数组定义枚举顺序
for (var i = 0 ; i < properties.length; i += 1) {
console.log(properties[i]+':'+ person[properties[i]] );
}
对于JavaScript对象来说,用户可以使用for/in语句遍历一个对象“可枚举”的属性,但并不是所有对象属性都可以枚举,只有用户自定义的私有属性和原型属性才允许枚举。
■小结
为了判定指定私有属性是否允许枚举,Object对象定义了 propertyIsEnumerable()方法。该方法的返回值为true,则说明指定的私有属性可以枚举,否则是不允许枚举的。
console.log(o.propertylsEnumerable("a")); //返回值为true,说明可以枚举
console.log(o.propertylsEnumerable("b")); //返回值为true,说明可以枚举
console.log(o.propertylsEnumerable("c")); //返回值为false,说明可以不枚举
console.log(o.propertylsEnumerable("d")); //返回值为false,说明可以不枚举
var o = F;
console.log(o.propertylsEnumerable(ndn)); //返回值为true,说明可以枚举
点击加载更多评论>>