ES中,变量可以存在两种类型的值,即原始值和引用值
原始值
存储在栈中的简单数据段,也就是说他们的值
直接存储在变量的访问的位置
引用值
存储在堆(heap)中的对象,也就是说存储在变量出的是一个指针
原始类型:
underfined null boolean number string
这五个是原始类型
这五个原始类型占据的空间是固定的,存储在较小的内存区域 栈中,便于迅速查询
(这里string有点奇怪,在许多语言中,字符串被看作引用类型,但在ES的语法规范中,他被看作了原始类型,但字符串应该是可以变长的)
引用类型:
除了 原始类型都是引用类型
当然原始类型也有对应的引用类型
可以用 let num = new Number() 创建对象
引用类型的存储空间将从堆分配,由于引用值的大小会改变,所以不能把他放在栈中,否则会降低查找变量的速度。而放在栈中的是变量的地址,地址是固定长度的,所以存储在栈中没有任何负面性能的影响
由这副图可以看出
数据类型 string number underfined boolean null 都是原始类型
数据类型 object function 是引用类型
而不同类型造成的结果不一样
在chrome浏览器控制台的代码演示
- 定义了 a = b 修改b的值a的值不会受到影响 (number,原始数据类型)
- 定义了 d = c 修改d的值c的值受影响了(JSON,对象,不是原始数据类型)