一、.存储上的区别
1.基本数据类型是存放在栈中的简单数据段。
2.引用数据类型是存放在堆内存中的对象,在栈内存中存放的是堆内存中具体内容的引用地址,通过这个地址可以快速查找到对象。
二、比较上的区别
1.基本数据类型的比较是值的比较
let a = '{}'
let b = '{}'
console.log(a == b) //true
直接比较值,看起来一样那么他就是一样的。
2.引用类型的比较是引用的比较
var a = {}
var b = {}
console.log(a == b) //false
问:看起来明明一样为什么会是false?
答:因为引用类型比较的是地址,也就是比较两个对象保存在栈区的指向堆内存的地址是否相同,虽然看起来一样,但是他们指向堆内存的地址是不一样的,所以两个对象不相等。
三、赋值上的区别
1.基本数据类型的赋值是简单赋值,如果一个变量向另一个变量赋值基本类型的值,会在变量对象上创建一个新值,然后把这个值复制到为新变量分配的位置上。
var a = 10
var b = a
a++
console.log(a) //11
console.log(b) //10
a在内存中保存的值是10,当使用a的值来初始化b时,b中也保存了10,这两个值是完全独立的,相当于b把a的值复制了一份,所以两个变量的任何操作都不会互相影响。
2.引用类型的赋值是对象引用
var a = {}
var b = a
a.name = "haha"
console.log(a.name) //haha
console.log(b.name) //haha
b.age = 29
console.log(a.age) //29
console.log(b.age) //29
当一个变量向另一个变量赋值引用类型的值时,同样也会将栈内存中的值复制一份放到新变量分配的空间中,但是引用类型保存在栈内存中的变量是一个地址,这个地址指向的是堆内存中的对象,所以这个变量其实复制了一个地址,两个地址指向同一个对象,改变其中任何一个变量都会互相影响。