1.数据类型
数据分为基本数据类型(String,Number,Boolean,Null,Undefined, Symbol)和对象数据类型
基本数据类型的特点:直接存储在栈中
对象数据类型的特点:存储的是该对象在栈中的引用,真实的数据存放在堆内存中(栈中只存在对象的引用,真正的对象在堆中)
2.浅拷贝与深拷贝的区别
浅拷贝只复制某个对象的指针,而不复制对象本身,新旧对象还是共享同一块内存
深拷贝复制完整的对象,不共享内存空间
1.浅拷贝
方法一:Object.assign()
let a = {
age : 1
}
let b = a
a.age = 2
console.log(b.age);
给变量b赋值一个对象a,可以发现a的值改变时b的值也会改变,因为两者的值会是同一个引用,但有时候我们不希望这样就需要想办法来解决
这里给出的方法是Object.assign,这个方法有两个参数target,source,将source拷贝给target,并返回该对象
Object.assign(target, ...sources)
let a = {
age: 1
}
let b = Object.assign({},a)
a.age = 2
console.log(b.age)
方法二: ...运算符
我们也可以通过展开运算符来解决
let a = {
age: 1
}
let b = {...a}
a.age = 2
console.log(b.age)
2.深拷贝
通常浅拷贝已经能解决很多问题了,但是如果对象还包含有对象,我们上面的方法就要失效了
深拷贝我们需要通过JSON.stringify(object))
JSON.stringify() 方法用于将 JavaScript 值转换为 JSON 字符串