现代JavaScript编程:经典范例与实践技巧
上QQ阅读APP看书,第一时间看更新

2-5 ECMAScript中的数据类型

变量是用来存储特定意义的值。在JavaScript中,变量可以存储两种类型的值:原始值和引用值。原始值和引用值的区别在于存储的位置与访问的方式不同。原始值是存储在栈中的简单数据,引用值是存储在堆中的对象数据。也就是说,当你通过变量名访问原始值时,会直接访问到其存储在栈中的数据;而通过变量名访问引用值时,会首先获取存储在栈中的对象地址,根据地址再向堆中查找真正的对象数据。ECMAScript中定义的原始类型有5种,分别为Undefined(未定义类型)、Null(空对象类型)、Boolean(布尔类型)、Number(数字类型)、String(字符串)类型。图2-1描述了原始值与引用值的差异。

原始值所占的内存大小一般是固定不变的,将其存储到栈中可以更快地进行数据访问。而引用值所占的内存通常较大并且不固定,但其地址所占的内存大小是固定不变的,将其地址存入栈中不会影响性能。在5种原始类型中,String类型十分特殊,因为其大小也是不固定的。在Java、Objective-C等语言中,字符串通常会被定义为引用类型,但JavaScript中依然将其作为一种原始类型。

图2-1 原始值与引用值图示