最新的 ECMAScript 标准定义了 7 种数据类型:。
- Boolean:布尔类型,值为 true 或 false
- String:字符串类型,值要使用双引号或者单引号括起来
- Number:64 位双精度浮点型的数字数据类型
- Null:null 值一直是一个被讨论点,通常来说,表示一个不存在或者无效 object 或者地址引用。语言实现中空引用的含义各不相同。
- Undefined:一个原始值自动分配给刚刚声明的变量或没有实际参数的形式参数。
- Symbol:ECMAScript 6 新定义
- Object:指包含了数据和处理数据指令的数据结构(在 JavaScript 中除了基本数据类型以外的都是对象,数据是对象,函数是对象,正则表达式是对象)
以上 7 种数据类型中 Object 是引用数据类型,那么基本数据类型和引用类型的区别是啥呢?
基本数据类型是存放在栈中,他们存储的是对应的值,每个基本类型的在栈中的存储空间的大小是确定的
var x = 10
var y = x
y = 20
console.log(x) // 10
console.log(y) // 20
栈内存中初始存放的值
变量 | 值 | |
---|---|---|
x | 10 |
栈内存中添加 y,并把 x 的值赋值给 y
变量 | 值 | |
---|---|---|
x | 10 | |
y | 10 |
修改 y 的值
变量 | 值 | |
---|---|---|
x | 10 | |
y | 20 |
引用数据类型是存放在堆内存中的对象,在栈中其实是保存的是指向对内存的一个地址,通过这个地址来寻找对象
var animal = new Object()
var dog = animal
dog.bark = '汪汪'
console.log(animal.bark)