for in
for … in 循环遍历对象自身的和继承的可枚举属性(循环遍历对象自身的和继承的可枚举属性(不含Symbol属性),可以遍历到原型上的数据
Objet.keys
Object.keys()遍历 (返回一个数组,包括对象自身的(不含继承的)所有可枚举属性(不含Symbol属性).),
不可以遍历到原型上的数据
Object.getOwnPropertyNames(obj)
返回一个数组,包含对象自身的所有属性(不含Symbol属性,但是包括不可枚举属性,也不包括原型上的属性)
Reflect.ownKeys(obj)
返回一个数组,包含对象自身的所有属性,不管属性名是Symbol或字符串,也不管是否可枚举,也不包括原型的
遍历对象的方法 | 原型的属性 | 不可枚举的属性 | Symbol类型的key |
---|---|---|---|
for in | yes | no | no |
Object.keys | no | no | no |
Object.getOwnPropertyNames | no | yes | no |
Reflect.ownKeys | no | yes | yes |
ps:
看看这段ts报错的原因
keyof肯定是把不可枚举的也包括在内了 所以这个也会报错
https://www.typescriptlang.org/play?#code/GYVwdgxgLglg9mABAcwKZQAoCc4AcDOATADwAqiqAHlKmACb6IDyARgFarQB8AFHOwC5EpAJRCA1qgCecYMMQBvAFABILOhBYkrDtAB0kqfj7sRSgL5KgA