1.深拷贝与浅拷贝
深拷贝只针对复杂数据类型
如何实现深拷贝?
1)递归
function deepClone(obj){
let objClone = Array.isArray(obj)?[]:{};
if(obj && typeof obj==="object"){
for(key in obj){
if(obj.hasOwnProperty(key)){
//判断ojb子元素是否为对象,如果是,递归复制
if(obj[key]&&typeof obj[key] ==="object"){
objClone[key] = deepClone(obj[key]);
}else{
//如果不是,简单复制
objClone[key] = obj[key];
}
}
}
}
return objClone;
}
let a=[1,2,3,4],
b=deepClone(a);
a[0]=2;
console.log(a,b);
![image.png](https://img.haomeiwen.com/i15867632/8e217b73d7076072.png?
imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
或者用Jq里面的extend方法实现深拷贝
let a=[1,2,3,4],
b=a.slice();
a[0]=2;
console.log(a,b);
注意:同理,concat方法与slice也存在这样的情况,他们都不是真正的深拷贝,这里需要注意。
可以用.除了递归,我们还可以借用JSON对象的parse和stringify
function deepClone(obj){
let _obj = JSON.stringify(obj),
objClone = JSON.parse(_obj);
return objClone
}
let a=[0,1,[2,3],4],
b=deepClone(a);
a[0]=1;
a[2][0]=1;
console.log(a,b);
结合Localstorage
[https://www.cnblogs.com/echolun/p/9088189.html] (https://www.cnblogs.com/echolun/p/9088189.html)
2.事件循环?(也就是Js的运行机制)
js是个单线程。个线程只有一个,页面渲染、函数处理都在这个主线程上执行。
工作线程:也称幕后线程,这个线程可能存在于浏览器或js引擎内,与主线程是分开的,处理文件读取、网络请求等异步事件。
所有任务分为同步任务和异步任务。其中定时器也属于异步任务。以及ajax都属于异步任务。
异步任务会通过任务队列的机制(先进先出的机制)来进行协调。具体的可以用下面的图来大致说明一下:
image.png
https://zhuanlan.zhihu.com/p/87684858
3.vue兼容ie9
4.vue路由不刷新问题
5.css中Postion:relative原点是什么??
元素本身
网友评论