JavaScript中对象的属性分为两种: 数据属性 和 访问器属性 。然后根据具体的上下文环境的不同,又可以将属性分为: 原型属性 和 实例属性 。原型属性是定义在对象的原型( prototype
)中的属性,而实例属性一方面来自构造的函数中,然后就是构造函数实例化后添加的新属性。
在JavaScript中除了检测对象的属性是否存在,还会经常对对象的属性进行遍历(枚举)。而在JavaScript中遍历一个对象的属性并不太简单,主要有两个原因:
- JavaScript中的对象通常都处在某个原型链中,它会从一个或多个的上层原型上继承一些属性
- JavaScript中的属性不光有值,它还有一些除了值以外的其他特性,其中一个影响属性遍历的特性就是
[[Enumerable]]
,如果该值为true
,则这个属性是可枚举的,否则反之
这篇文章将总结有关于JavaScript中对象属性枚举的几种方法:
for ... in
Object.keys()
Object.getOwnPropertyNames()
for ... of
for ... in
for...in
循环可以遍历对象中所有可枚举的对象属性(包括对象自有属性和继承的属性)。不过需要注意的是,使用 for...in
循环遍历对象属性时返回的属性会因为各个浏览器不同导致对象属性遍历的