前提
先定义一个对象
let obj = {a: 1, b: 2}
obj.__proto__.name = 22
obj[Symbol()] = 33
Object.defineProperty(obj, 'cc', {
value: 'cc',
enumerable: false
})
// {a: 1, b: 2, cc: "cc", Symbol(): 33} , obj.__proto__.name -> 22
各个方法
- for…in -> 遍历对象属性, 拿到可枚举的和原型上的属性, 不能拿到Symbol
for(key in obj){
console.log(key)
}
// a
// b
// name
Object.keys()-> 返回一个由一个给定对象的自身可枚举属性组成的数组, 不会拿到原型上的属性, 拿不到Symbol
Object.keys(obj) // ["a", "b"]
Object.values()-> 返回一个给定对象自身的所有可枚举属性值的数组, 不能拿到Symbol
Object.values(obj) //[1, 2]
Object.entries()-> 返回一个给定对象自身可枚举属性的键值对数组, 不会拿到原型上的属性
Object.entries(obj) // [["a", 1],["b", 2]]
Object.getOwnPropertyNames()-> 返回一个由指定对象的所有自身属性的属性名(包括不可枚举属性但不包括Symbol值作为名称的属性)组成的数组
Object.getOwnPropertyNames(obj) // ["a", "b", "cc"]
Object.getOwnPropertySymbols()-> 返回一个给定对象自身的所有 Symbol 属性的数组
Object.getOwnPropertySymbols(obj) //[Symbol()]
Reflect.ownKeys()-> 返回一个由目标对象自身的所有属性键组成的数组, 包括不可枚举, Symbol
Reflect.ownKeys(obj) // ["a", "b", "cc", Symbol()]
博客先介绍需定义一个对象作为前提,接着阐述了多种遍历对象属性的方法,如 for…in 可遍历可枚举及原型上属性但拿不到 Symbol,还有多种返回对象不同属性数组的方法,涵盖可枚举、不可枚举及 Symbol 属性等情况。
2万+

被折叠的 条评论
为什么被折叠?



