对象属性方法总结
总结一下方便记忆
- in 操作符 所有属性都可以访问到,下面就不提及in操作符了
- 继承属性- 只有for in 可以访问
 
- 不可枚举属性- 只有Object(Reflect).getOwnPropertyXXXX静态方法可以访问到
 
| 方法 | 不可枚举属性 | 继承属性 | symbol属性 | 自身属性 | 
|---|---|---|---|---|
| in | ✅ | ✅ | ✅ | ✅ | 
| for…in | ❌ | ✅ | ❌ | ✅ | 
| JSON.stringfy() | ❌ | ❌ | ❌ | ✅ | 
| Object.assign() | ❌ | ❌ | ✅ | ✅ | 
| … 扩展运算符 | ❌ | ❌ | ✅ | ✅ | 
| Object.keys()、Object.values()、Object.entries() | ❌ | ❌ | ❌ | ✅ | 
| Object.getOwnPropertyNames() | ✅ | ❌ | ❌ | ✅ | 
| Object.getOwnPropertySymbols(obj) | ❌ | ❌ | ✅ | ❌ | 
| Reflect.ownKeys(obj) | ✅ | ❌ | ✅ | ✅ | 
| Object.getOwnPropertyDescriptor(s) | ✅ | ❌ | ✅ | ✅ | 
| Object.hasOwn(s) | ✅ | ❌ | ✅ | ✅ | 
| Object.prototype.hasOwnProperty(s) | ✅ | ❌ | ✅ | ✅ | 
下面是验证代码,首先创建一个测试对象,拥有
- self自身属性
- parent继承属性
- sym symbol属性
- noEnumerable 不可枚举属性
| 1 | const parent = { | 
测试代码如下,在nodejs 14+环境下运行
| 1 | console.log("\n for ... in \n"); | 
运行结果如下
| 1 | for ... in | 
