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