js的6种基本数据类型:string,number,undefined,null,boolean,symbol(一直不清楚这个有啥用,翻了资料也没想明白,可能段为不够吧毕竟菜鸡本鸡。不重复唯一标识??)
引用类型L:Object type :Object 、Array 、Function 、Data等
基本数据类型是按值存放在栈中
引用类型是把其地址存放在栈中,每次访问都先通过栈取得地址再从堆中取得真正的数据,所以也叫引用,类似C语言的指针?
```html
```javascript
let obj1 = {
name:"lisi",
age:12
}
let obj3 = {
sex:"man",
friends:{
name:"lisi",
age:1
},
arr:[1,2,3]
}
//浅拷贝的实现方式
// 1)直接赋值
//应该还有挺多的一瞬间没想起来
// 2)object.assign
//(主要用于对象的合并,第一个参数为目标对象,后面均为元对象,若只有一个参数
//返回其引用),可以拷贝正则和函数
//注意:若源对象为简单的数据类型,则为深拷贝,若元对象的属性还有对象,
//则这个属性为浅拷贝
// let obj2 = Object.assign(obj1,obj3)
// // obj2.age = 111
// // obj3.sex = 'woman';
// // obj3.aa = 11
// // console.log(obj1);
// obj3.friends.name = 'aaa'
// console.log(obj1);
//深拷贝的实现
// JSON.parse(JSON.stringify())但是无法拷贝正则,函数
//递归
// let obj3 = {
// sex:"man",
// friends:{
// name:"lisi",
// age:1
// }
// }
function deepclone(obj){
//判段是数组还是对象,不能用typeof判断,看我下篇推文
let result = Array.isArray(obj)?[]:{}
for(let key in obj){
if(typeof obj[key] == 'object'){
result[key] = deepclone(obj[key])
//递归调用
}
else {
result[key] = obj[key]
}
}
// Object.keys(obj).forEach(key => {
// 也可以用这个进行遍历
// })
return result;
}
let obj4 = deepclone(obj3)
obj4.friends.sex= 'man'
obj4.arr.push(222)
console.log(obj4);
console.log(obj3);```