这篇博客是读You Dont Know JS系列书中this & Object Prototypes这本书后总结的第二篇博客(第一篇讲this到底是什么)。
这篇博客讲对象,其中会涉及到一些让我们困惑已久的问题,比如:对象的数据属性和访问器属性,对象属性(property)的特性(attribute)。
数据类型
关于对象你首先需要知道,JavaScript中“一切都是对象”这句话是错的。JavaScript中数据类型有六种:
- string
- number
- boolean
- null
- undefined
- object
JavaScript中存在几种内建对象:
* String
* Number
* Boolean
* Object
* Function
* Array
* Date
* RegExp
* Error
我们之所以可以调用'abc'.charAt(1)
是因为string类型在这种情况下会自动转换成String。这是一个很基础的点,不过多展开。
创建对象
创建对象两种方式:
- 对象字面量
- 构造函数
// 对象字面量
var obj = {
key: value
};
// 构造函数
var obj = new Object();
obj.key = value;
对象属性(property)的特性(attribute)
对象的属性看起来像是在对象上,但其实引擎会根据自己的实现来存储这些值,而且通常不是放在对象内部,对象内存储的是这些属性的名称,它们像指针一样指向存储的地方,技术上讲,叫引用(reference)。
什么是特性
对象的属性分为两类:数据属性和访问器属性。数据属性就是存有一个值或者一个引用的属性,访问器属性是,在读取该属性时会调用其内部的getter函数,这个函数负责返回有效值,在写入该属性值会调用其内部的setter函数,这个函数负责决定如何写入新值。
不管是数据属性还是访问器属性,都有一些描述这些属性的“文档”,这些“文档”以对象的形式存在