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