for in
主要用于遍历对象的可枚举属性、包括自有属性、继承自原型的属性。
var obj = {name: 'zhang',sex: 'male'}Object.defineProperty(obj,'age',{value: 18enumerable: false}) //增加不可枚举的属性ageObject.prototype.fn1 = function(){console.log('我是函数fn1')} //通过原型链增加一个属性,为一个函数Object.prototype.b = 3 //通过原型链增加一个属性,为一个整型值3for(let key in obj){console.log(key)}//name sex fn1 b
obj = {name: “zhang”, sex: “male”, age: 18}
通过例子可以看出,通过for in循环出来的key依次为 name、sex、fn1、b
示例中的属性age为不可枚举的,所以没有循环出来,如果设置enumerable:true则可以循环出来。
Object.keys()
返回一个数组,元素均为对象自有可枚举的属性。
var obj = {name: 'zhang',sex: 'male'}Object.defineProperty(obj,'age',{value: 18enumerable: false}) //增加不可枚举的属性ageObject.prototype.fn1 = function(){console.log('我是函数fn1')} //通过原型链增加一个属性,为一个函数Object.prototype.b = 3 //通过原型链增加一个属性,为一个整型值3Object.keys(obj)// ['name','sex']
obj = {name: “zhang”, sex: “male”, age: 18}
返回值为 [‘name’,’sex’] ,可以明显的看出来obj的自有属性有是三个,分别是name、sex、age, 但是age是不可枚举的属性,所有对象obj经过Object.keys()处理过,返回自有可枚举的属性即为[‘name’,’sex’]
Object.getOwnPropertyNames()
返回一个数组,元素均为对象的自有属性,包括可枚举和不可枚举类型。
var obj = {name: 'zhang',sex: 'male'}Object.defineProperty(obj,'age',{value: 18enumerable: false}) //增加不可枚举的属性ageObject.prototype.fn1 = function(){console.log('我是函数fn1')} //通过原型链增加一个属性,为一个函数Object.prototype.b = 3 //通过原型链增加一个属性,为一个整型值3Object.getOwnPropertyNames(obj)//['name','sex','age']
obj = {name: “zhang”, sex: “male”, age: 18}
可以明显的看出来obj的自有属性有是三个,分别是name、sex、age, 故返回对象的自有属性即为[‘name’,’sex’,’age’]
