基本数据类型: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 为指向后者对象的指针

博客介绍了JavaScript的基本数据类型和引用数据类型,如引用数据类型包含普通对象、数组等。重点阐述了两者区别,通过示例说明变量赋值时引用数据类型复制的是地址,修改数据会影响多个变量,还详细讲解了函数中指针变化情况。
695

被折叠的 条评论
为什么被折叠?



