JavaScript对象是动态的,可以新增属性,也可以删除属性--但他们常用来模拟静态对象以及静态类型语言中的“结构体”(struct)。有时候他们也用作字符串的集合(忽略名/值对中的值)
除了字符串、数字、true、false、null和undefined之外,JavaScript中的值都是对象。
JavaScript对象的属性包括名字和值。属性名可以是包含空字符串在内的任何字符串,但不同存在两个同名的属性。除了名字和值之外,每个属性还有一些与之相关的值,称为“属性特性”---可写,可枚举,可配置。
可写:表明是否可以设置该属性的值。
可枚举:表明是否可以通过for/in循环返回该属性。****
可配置:表明是否可以删除或修改该属性。
注:在ECMSciript之前,通过代码给对象创建的所有属性都是可写的、可枚举的、可配置的。在ECMScript 5中则可以对这些特性加以配置。6.7讲如何操作。
JavaScript对象,除了包含属性之外,每个对象还拥有三个相关的对象特性(object attribute):
对象的原型(prototype)指向另外一个对象,本对象的属性继承自它的原型对象。
对象的类(class)是一个标识对象类型的字符串。
对象的扩展标记(extensible flag)指明了(在ECMScript 5中)是否可以向该对象添加属性。
最后,我们用下面这些术语来对三类JavaScript对象和两类属性作区分:
内置对象(native object)是由ECMScript规范定义的对象或类。例如,数组、函数、日期和正则表达式都是内置对象
宿主对象(host object)是由JavaScript解释器所嵌入的宿主环境(比如Web浏览器)定义的。客户端JavaScript中表示网页结构的HTMLElement对象均是宿主对象。既然宿主环境定义的方法可以当成普通的JavaScript函数对象,那么宿主对象也可以当成内置对象。
自定义对象(use-defined object)是由运行中的JavaScript代码创建的对象。
自有属性(own property)是直接在对象中定义的属性。
继承属性(inherited property)是在对象的原型对象中定义的属性。
创建对象
对象直接量(最简单的方式)、关键字new、(ECMScript 5中的)Object.create()函数