基本数据类型:Number、String、Boolen 、 Symbol、 null 、 undefined
引用数据类型:object
(普通对象、数组、正则、函数……)
区别
数据类型 | 基本 | 引用 |
---|---|---|
储存的元素 | 值 | 地址 (指针) |
储存的地点 | 栈 | 堆 |
eg1
const a = []
对于常量 a
来说,假设内存地址(指针)为 #001
,那么在地址 #001
的位置存放了值 []
,常量 a
存放了地址(指针) #001
,再看以下代码
const a = []
const b = a
b.push(1)
当我们将变量赋值给另外一个变量时,复制的是原本变量的地址(指针),也就是说当前变量 b
存放的地址(指针)也是 #001
,当我们进行数据修改的时候,就会修改存放在地址(指针) #001
上的值,也就导致了两个变量的值都发生了改变。
eg2
function test(person) {
person.age = 26
person = { name: 'yyy',
age: 30 }
return person
}
const p1 = { name: 'yck',
age: 25 }
const p2 = test(p1)
console.log(p1) // -> 26 'yck'
console.log(p2) // -> 30 'yyy'
第一步:p1
=> 指向对象{name:'yck', age: 25}
的指针 0001
第二步:test(p1)
传指针person.age = 26
修改该对象
第三步:代码继续执行 ,其中person
为形参,初始为p1(指向0001)。然后因为 const
声明的 p1
是常量,不可以整体修改,所以函数内部person = {}
将在内存中新开辟一个空间存放形参,即另一个对象指针(0002)
第四步:return person
指针与函数头部 ,故而p2
为指向后者对象的指针