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 | { |