javascript对像之属性遍历

javascript 检索属性的API的检索范围老记不住, 做个表格, 记录一下.

属性遍历/检查

语法/运算符 普通属性 原型链 不可枚举 Symbol 说明
in 会检查对像属性及其原型链
for...in 会访问原型链
Object.keys(obj) [name1,name2]
Object.getOwnPropertyNames(obj) 会列出不可枚举属性
Object.getOwnPropertySymbols(obj)
Reflect.ownKeys(obj)
Object.entries(obj) 规则同keys
[[name1,value1],[name2,value2]]

“普通属性” 指可枚举的自有属性, 检索不会区分 “数据属性” 和 “访问器属性”;
__proto__ 非常特殊,常见JS引擎下除了 in 运算符都不会检出;

附:属性描述符说明

1
2
3
4
5
6
7
8
9
10
{
"configurable": false, //为 true 时,该属性描述符才能够被改变,同时该属性也能从对应的对象上被删除。默认为 false。
"enumerable": false, //为true时,该属性才能够出现在对象的枚举属性中。默认为 false。
//数据描述符(数据属性)同时具有以下可选键值:
"value": undefined, //该属性对应的值。可以是任何有效的 JavaScript 值(数值,对象,函数等)。默认为 undefined。
"writable": false, //为true时,value才能被赋值运算符改变。默认为 false。
//存取描述符(访问器属性)同时具有以下可选键值:
"get": undefined, //一个给属性提供 getter 的方法,默认为 undefined。
"set": undefined, //一个给属性提供 setter 的方法,默认为 undefined。
}