获取对象属性的几种方法getOwnPropertyNames/Object.keys()/for...in

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/m0_38102188/article/details/85094796
  1. getOwnPropertyNames
    获取对象自身的可枚举和不可枚举属性,不包括属性名为Symbol值的属性
var obj = {name: 'zyp', age: 18};
Object.defineProperty(obj, 'like', {
	enumerable: false,
	value: 'reading'
})
Object.defineProperty(obj, Symbol(), {
	value: 'symbol'
})
var properNameArr = Object.getOwnPropertyNames(obj); // properNameArr结果为["name", "age", "like"]
  1. Object.keys()
    获取对象自身的可枚举属性
var obj = {name: 'zyp', age: 18};
Object.defineProperty(obj, 'like', {
	enumerable: false,
	value: 'reading'
})
Object.defineProperty(obj, Symbol(), {
	value: 'symbol'
})
var properNameArr = Object.keys(obj);  // properNameArr结果为["name", "age"]
  1. for…in
    获取对象自身及其原型链上的可枚举属性
var obj = {name: 'zyp', age: 18};
Object.defineProperty(obj, 'like', {
	enumerable: false,
	value: 'reading'
})
Object.defineProperty(obj, Symbol(), {
	value: 'symbol'
})
Object.prototype.haha = 'haha'
var properNameArr = [];
for(let i in obj) {
	properNameArr.push(i)
}
console.log(properNameArr) // properNameArr结果为["name", "age", "haha"]

要注意的是:以上三种方法遍历对象的可枚举属性时,返回的结果顺序是不确定的,因为这种无序性,因此不建议在使用for…in循环进行遍历是对对象的属性进行删除/添加/修改等操作,除非是针对当前正在被访问的属性。也因为这种无序性,在对数组这种有顺序的数据结构进行遍历时,最好不要用for…in(改用for循环/forEach/for…of)。

猜你喜欢

转载自blog.csdn.net/m0_38102188/article/details/85094796