对象属性方法总结
总结一下方便记忆
- 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 |