ECMAScript变量可以包含两种不同类型的数据:原始值和引用值。原始值就是最简单的数据,引用值则是由多个值构成的对象。
原始值
JS中包含了6种原始值:Undefined、Null、Boolean、String、Number和Symbol。保存原始值的变量是按值访问的,因为我们操作的就是存储在变量中的实际值。
引用值
引用值是保存在内存中的对象。JS中不允许直接访问内存位置,因此也就不能直接操作对象所在的内存空间。在操作对象时,实际上操作的是该对象的引用而非实际的对象本身。保存引用值的变量是按引用访问的。
复制方式
原始值和引用值在变量复制时有所不同。在通过变量把一个原始值赋值给另一个变量时,原始值会被复制到新变量的位置。在把引用值从一个变量赋值给另一个变量时,存储在变量中的值也会被复制到新变量所在的位置,这个复制的值实际上是一个指针,它指向存储在堆内存中的对象。操作完成后,两个变量实际上指向同一个对象。