位置:首页 > 软件操作教程 > 编程开发 > JavaScript > 问题详情

JavaScript 检测枚举属性

提问人:刘团圆发布时间:2020-11-25

■知识点

    在大多数情况下,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,说明可以枚举

继续查找其他问题的答案?

相关视频回答
回复(0)
返回顶部