JS可枚举属性

1.什么是枚举

  1. 可枚举可以理解为是否可以被遍历被列举出来,可枚举性决定了这个属性能否被for…in查找遍历到。
  2. js中基本包装类型的原型属性是不可枚举的(不可被 for…in… 遍历),比如:
    Boolean,NumberString三个的原型属性,或是 Boolean,Number值,都是不可枚举的,即是基本类型,也是引用类型。基本包装类型还可以像引用类型一样访问它自带的一些方法,但是不能像引用类型那样自定义方法。

2.判断属性是否可枚举的方法

2.2 for…in…

var num = new Number();
for(var pro in num) {
    console.log("num." + pro + " = " + num[pro]);
}

无法打印,number中的属性无法被枚举,所以 for…in…不起作用

注意:

  • 并不是所有的属性都会在for-in循环中显示。数组的 length 属性和 constructor 属性就不会被显示。

2.1 Object.propertyIsEnumerable()

  • propertyIsEnumerable( ) 方法返回一个布尔值,表示属性是否可以枚举
  • 每个对象都有一个propertyIsEnumerable方法。该方法可以确定对象中的指定属性是否可以通过for…in循环枚举,但通过原型链继承的属性除外。如果对象不具有指定的属性,则此方法返回false。
语法
  • obj.propertyIsEnumerable(prop),prop:表示要测试的属性名称
  • 返回值:Boolean类型
//例一:
var obj = {}
obj.propertyIsEnumerable('a') //false

//例二:
var obj = {a:1}
obj.propertyIsEnumerable('a') //true
  • 简单来说,用户定义的属性都是可枚举的,而内置对象不可枚举。
  • 一种情况除外:当属性是继承于其它对象原型时,这时用户定义的属性就是不可枚举的

你可能感兴趣的:(JS,javascript,开发语言,ecmascript)