浅拷贝:对象A赋值给对象B后,A的内容改变,对象B也会跟着改为A的内容。
深拷贝:对象A赋值给对象B,A内容改变,B不会改变
JSON.stringify() JSON.parse()
function deepClone(obj){
// 判断obj的类型 分别声明数组或对象
var objClone = Array.isArray(obj) ? [] : {};
if(obj && typeof obj==="object"){
for(key in obj){
//判断obj子元素是否为对象,如果是,递归复制
if(obj[key] && typeof obj[key] === "object"){
objClone[key] = deepClone(obj[key]);
}else{
//如果不是,简单复制
objClone[key] = obj[key];
}
}
} else {
// 非数组或对象 直接赋值返回
objClone = obj;
}
return objClone;
}
先判断obj为数组还是对象,如果是数组则空[],对象则空{},如果不是对象也不是数组,则简单赋值。 再判断obj的子元素是否为对象,如果是,则递归调用。如果不是,就简单复制。
图片懒加载,图片懒加载,src=一个1px * 1px的小图片,data-src 存放真正需要的图片,
当元素进入到可视区域的时候 获取data-src里内容赋值给src。
选择器: querySelector()获取满足条件的第一个元素。 querySelectorAll()获取所有符合条件的元素,返回类数组。
给一个dom元素设置自定义属性的方法(4种)
- oDiv.key = value
- oDiv.setAttribute(key, value)
- oDiv.dataset.key = value
- div data-key=valu
获取dom元素自定义属性方法
- oDiv.getAttribute(key)
- oDiv.key
- oDiv.dateset.key (key需要用驼峰写法)
两者区别: setAttribute/dataset 可以在html中可以看到 oDiv.key 在html中看不到
本地储存及区别:
cookie :存储大小为4K,可以设置过期时间,如果不设置关闭浏览器窗口就没了。
localStorage :存储大小为5M,会永久的存储在浏览器中 除非手动删除。
sessionStorage :存储大小为5M,浏览器窗口关闭之后就没了。