{
let a = new String('123')
let b = String('123')
let c = '123'
// 这里对比a,b,c
console.log(a==b) // true
console.log(a===b) // false
// 因为a是引用数据类型,存放在堆内存中,b存放在栈内存中,所以他俩只是值相同,并不全等
console.log(b==c,b===c) // true true
// b和c都是存放在栈内存中,值相等,类型也相等
}
栈和堆的区别
栈区存放东西像水杯里的水,先进的后出
堆区存放的东西像水管里的水,先进的先出
栈区存放
基本数据类型是按值访问的,因为可以直接操作保存在变量中的实际值
let a = 10
let b = a // 把a的值复制一份给b
b = 20 // 我们改变b的值,a的值没有发生变化
// b只是保存了a复制的一个分身,所以b的改变对a没有影响
console.log(a,b) // 10 20
堆区存放
引用数据类型---对象
let obj1 = new Object()
obj1.name = '小胡'
let obj2 = obj1
// 栈区的obj1和obj2 指向的堆区的同一个对象
//(引用数据类型存储的是指针,它指向这个类型值在内存里保存的地址。)
obj2.name = '小陈'
// 添加属性(通过obj2添加一个属性)
obj2.age = 18
console.log(obj1.name) // 小陈
console.log(obj1.age) // 18
引用数据类型---数组
// 数组的是放在堆里,但变量c拿到的是一个引用地址,指向这个数组
let c = [1,2,3]
// 把变量c的地址索引复制给d,不是复制数据内容
let d = c
console.log(d) // [1,2,3]
// 重新给c赋值,c的地址索引发生改变,无法查看原数据
// 等于在堆里重新放了一个新数组,c的地址索引指向了这个新数组
c = [4,5,6]
console.log(d) // [1,2,3]
基本数据类型存放在栈中,引用数据类型存放在堆中基本数据类型有 undefined,null,String,Number和Boolean{ let a = new String('123') let b = String('123') let c = '123' // 这里对比a,b,c console.log(a==b) // true console.log(a===b) // false // 因为a是引用数据类型,存放在堆内存中,b存