原始值(最简单的数据):Undefined、Null、Boolean、Number、String、Symbol
引用值(由多个值构成的对象):Object
- 把一个值赋值给变量时,JS引擎必须确定这个值是原始值还是引用值,保存原始值的变量是按值访问的,操作的就是存储在变量中的实际值。
- 引用值是保存在内存中的对象,JS不允许直接访问内存位置,所以操作对象时,操作的是该对象的引用,而非实际的对象本身。
把引用值从一个变量赋给另一个变量时,存储在变量中的值会被复制到新变量所在的位置,但是这里复制的值实际上是一个指针,它指向存储在堆内存中的对象,两个变量实际上指向同一个对象,所以一个变量的变化会在另一个对象上反映出来。
let obj1 = new Object();let obj2 = obj1;obj1.name = 'leesin';console.log(obj2.name) // 'leesin'

JS中所有函数参数的传递,都是按值传递的,函数中的参数就是局部变量。
确定类型
使用typeof来确定值的类型,对于原始值很有用,但是对引用值用处不大
例如:typeof null = object
因为null值是表示一个空对象指针
- 对于引用值,可以用instanceof去判断类型(instanceof判断原始值时,会始终返回false,因为原始值不是对象)
null instanceof Object = false
