javaScript对象与纯粹的面向对象语言的对象存在一定的区别:javaScript中的对象本质上是一个关联数组,或者说更像java里的Map数据结构,由一组key-value对组成。与java中Map对象存在区别的是,javaScript对象的value,不仅可以是值(包括基本类型的值和复合类型的值),也可以是函数,此时的函数就是该对象的方法。当value是基本类型的值或者复合类型的值时,此时的value就是该对象的属性值。
![5c8e8451e27c064a303817372ed67189.png](https://i-blog.csdnimg.cn/blog_migrate/001f919afbdd2ffe18486105a152e923.jpeg)
因此当需要访问某个javaScript对象的属性时,不仅可以使用obj。propName的形式,也可以采用obj[propName]的形式,有些时候甚至必须使用这种形式。
上面程序中粗体字代码遍历了Person对象的每个属性,因为遍历每个属性时,循环计数器是Person对象的属性名,因此程序必须根据属性名来访问Person对象的属性,此时不能采用p.propName的形式,如果采用p.propName的形式,javaScript不会把propName当成变量处理,它试图直接访问该对象的propName属性,但该属性实际并不存在。在浏览器中浏览该页面,如下所示
![686da3a60d90cdac5b18fac827bf4105.png](https://i-blog.csdnimg.cn/blog_migrate/538f33292a51438858f10e4d42955f13.jpeg)