原始数据类型
原始数据类型包括:Number、String、Boolean、null、undefined、symbol、BigInt。
- 特性:
- 1)基本数据类型的
值是不可变的
- 2)基本数据类型
不可以添加属性和方法
- 3)基本数据类型的
赋值是简单赋值
- 4)基本数据类型的
比较是值的比较
- 5)基本数据类型是
存放在栈区的
引用数据类型
引用数据类型:JavaScript中除了基本数据类型外就是引用数据类型了(也可以说是对象)。比如:Object、Array、Function、Data等。特性:
- 1)引用类型的
值是可以改变的
- 2)引用类型
可以添加属性和方法
- 3)引用类型的
赋值是对象引用
- 4)引用类型的
比较是引用的比较
- 5)引用类型是
同时保存在栈区和堆区中的
区别:
1)、声明变量时内存分配不同
原始类型:在栈中,因为占据空间是固定的,可以将他们存在较小的内存中-栈中,这样便于迅速查询变量的值
引用类型:存在堆中,栈中存储的变量,只是用来查找堆中的引用地址。
2)、访问机制不同
- 在javascript中是不允许直接访问保存在堆内存中的对象的,所以在访问一个对象时,首先得到的是这个对象在堆内存中的地址,然后再按照这个地址去获得这个对象中的值,这就是按引用访问。
- 而原始类型的值则是可以直接访问到的。
3)、复制变量时的不同
原始值:在将一个保存着原始值的变量复制给另一个变量时,会将原始值的副本赋值给新变量,此后这两个变量是完全独立的,他们只是拥有相同的value而已。
引用值:在将一个保存着对象内存地址的变量复制给另一个变量时,会把这个内存地址赋值给新变量,也就是说这两个变量都指向了堆内存中的同一个对象,他们中任何一个作出的改变都会反映在另一个身上。
null 和 undefined 区别
- 简单点理解:
undefined表示值不存在,null表示值存在但是为空,没有意义;
null == undefined
null === undefined
null: 作为对象原型链的终点
- 以下几种情况均为undefined
- 1)当定义一个变量没赋值。
- 2)当调用一个对象还没添加的属性时候。
- 3)当调用一个没有返回值的函数时。
栗子🌰:
let a;
let b = {};
b.name;
function c() {};
let d = c();