国外做螺栓比较好的网站,做的网站很卡是什么原因呢,网页设计与网站建设 作业,如何做视频网站技术指标文章目录 1. 拷贝1. 浅拷贝2. 深拷贝 2. 异常处理 1. 拷贝
这里指的拷贝是指拷贝引用类型的数据(对象)
1. 浅拷贝
拷贝对象#xff1a;Object.assign() 或者 {…obj} 展开运算符
const obj {name:liuze,age:23
}
const o {...obj};
o.age 22;
console.log(o);
console.… 文章目录 1. 拷贝1. 浅拷贝2. 深拷贝 2. 异常处理 1. 拷贝
这里指的拷贝是指拷贝引用类型的数据(对象)
1. 浅拷贝
拷贝对象Object.assign() 或者 {…obj} 展开运算符
const obj {name:liuze,age:23
}
const o {...obj};
o.age 22;
console.log(o);
console.log(obj);
// {name: liuze, age: 22}
// {name: liuze, age: 23}存在一个问题如下
const obj {name:liuze,age:23,obj2:{name:hh}
}
const o {...obj};
o.obj2.name liuze;
console.log(o);
console.log(obj);
// 都为
/*
{ age: 23name: liuzeobj2: {name: liuze}
}
*/如果是简单数据类型拷贝值引用数据类型拷贝的是地址(简单理解如果是单层对象没有问题如果是多层就有问题)
直接赋值和浅拷贝的区别
直接赋值的方法只要是对象都会相互影响因为是直接拷贝对象栈里面的地址浅拷贝如果是一层对象不相互影响如果出现多层对象拷贝还会相互影响
2. 深拷贝
拷贝的是对象不是地址
常见方法 通过递归实现深拷贝 const obj {name:liuze,age:23,obj2:{name:hh},hobby:[羽毛球,{game:[王者,和平]}]
}function deepCopy(obj){let ans null;if(obj instanceof Array){ans new Array();for(let index in obj){ans[index] deepCopy(obj[index]);}// 数组,先写Array再写Object}else if(obj instanceof Object){ans new Object();for(let key in obj){ans[key] deepCopy(obj[key]);}// 对象}else{ans obj;}return ans;
}const obj2 deepCopy(obj);
obj2.obj2.name liuze;
obj2.hobby[0] 足球;
obj2.hobby[1].game[0] 王者荣耀;
console.log(obj2);
console.log(obj);上述深拷贝代码有一定问题只是拷贝数据没有问题但是如果对象中有函数定义。。。是有问题的 lodash/cloneDeep lodash介绍文档在这lodashlodash.js下载链接为lodash.js !DOCTYPE html
html
headtitlejavascript/title
/head
body/body
script typetext/javascript srclodash.js/script
script typetext/javascriptconst obj {name:liuze,age:23,obj2:{name:hh},hobby:[羽毛球,{game:[王者,和平]}]}const obj2 _.cloneDeep(obj);obj2.hobby[0] 足球;console.log(obj);console.log(obj2);/script
/script
/html运行结果 通过JSON.stringify()实现 const obj {name:liuze,age:23,obj2:{name:hh},hobby:[羽毛球,{game:[王者,和平]}]
}const obj2 JSON.parse(JSON.stringify(obj));
obj2.hobby[0] 足球;
console.log(obj);
console.log(obj2);2. 异常处理
异常处理是指预估代码执行过程中可能发生的错误然后最大程度的避免错误的发生导致整个程序无法继续运行 throw抛异常 throw抛出异常信息程序也会终止执行throw后面跟的是错误提示信息Error对象配合throw使用能够设置更详细的错误信息 function sum(x,y){if(!x || !y){throw new Error(传入参数异常);}return x y;
}console.log(sum());try/catch/finally捕获异常 !DOCTYPE html
html
headtitlejavascript/title
/head
bodyp123/p
/body
script typetext/javascriptfunction fn(){try{const p document.querySelector(.p);p.style.color red;}catch(err){console.log(err.message);return}finally{console.log(11);}}fn();
/script
/script
/html运行结果 try。。。catch 用于捕获错误信息将预估可能发生错误的代码卸载try代码段中如果try代码段中出现错误后会执行catch代码段并截获错误信息finally不管是否有错误都会执行 debugger 用于调试的时候使用 function fn(){debugger;console.log(哈哈);
}fn();