Javascript对象属性的枚举方法比较

1.for-in

for-in遍历所有能通过对象访问的,可枚举的属性,包括实例属性和原型属性,引伸为defineProperty[[Enumerable]]属性.

ES5中将constructorprototype属性的[[Enumerable]]设为false,即不可枚举,但不适用于所有浏览器。

function Person(){}

Person.prototype.name = 'hello';

var p = new Person();

p.age = 18;

for(var i in p){
    console.log(i)     //age name
}

//其中age是实例属性,name是原型属性

2.Object.keys()

ES5中的Object.keys()可以取得对象上所有可枚举的实例属性,返回值是包含所有可枚举属性的字符串数组。

function Person(){}

Person.prototype.name = 'hello';

Person.prototype.addr = 'China';

var p = new Person();

p.age = 18;

console.log(Object.keys(Person.prototype))      //["name", "addr"]

//返回Person原型对象可枚举的实例属性,constructor属性不可枚举

3.Object.getOwnPropertyNames()

获取一个对象的所有实例属性,不论该属性是否可枚举。

function Person(){}

Person.prototype.name = 'hello';

Person.prototype.addr = 'China';

var p = new Person();

p.age = 18;

Object.getOwnPropertyNames(Person.prototype)    //["constructor", "name", "addr"]


//返回的数组中,constructor为不可枚举属性,name和addr属于可枚举属性。

猜你喜欢

转载自blog.csdn.net/qq_35087256/article/details/80274944
今日推荐