1. ajax
- 什么是ajax
- ajax是创建交互式网页应用开发技术
- 在不重新加载整个网页的前提下,与服务器交换数据并更新部分内容
- 如何实现
-
- 创建XmlHttpRequest对象 简称xmh
-
- 通过xmh对象里的open()方法,和服务器建立连接
-
- 构建请求所需的数据,并通过xmh的send()发送给服务器
-
- 通过xmh的onreadystate chansge事件监听服务器和你的通信状态
-
- 接收并处理服务器响应的数据结果
-
- 把数据渲染到HTML页面上
2. 浏览器的存储方式
- cookies
- 本地存储方式
- 兼容性好 请求头自带cookie
- 存储量小,资源浪费,使用麻烦
- localstorage
- 键值对方式存储,永久存储,兼容性好,操作方便
- 保存值的类型被限定,浏览器在隐私模式下不可读取,不能被爬虫
- sessionstorage
- indexedDB
3. 深拷贝与浅拷贝
1. 浅拷贝:
- 什么是浅拷贝
- 浅拷贝就是通过赋值的方式进行拷贝,把对象的表层赋值给一个新的对象,如果里面有属性值为数组或者对象的属性,那么就只会拷贝到该属性在栈空间的指针地址,新对象的这些属性数据就会跟旧对象公用一份,也就是说两个地址指向同一份数据,一个改变就会都改变。
- 如何实现浅拷贝
let obj={
name:'张三',
age:22
}
let obj1={...obj}
obj1.name='李四'
console.log(obj);
console.log(obj1);
const obj = {};
const source = {
name: 'nordon',
info: {
age: 18
}
};
Object.assign(obj, source);
console.log(obj);
source.info.age = 20;
console.log(obj);
console.log(source);
-
- Array.prototype.concat/slice
- 注意事项
- 不会拷贝对象的继承属性;
- 不会拷贝对象的不可枚举的属性;
- 可以拷贝 Symbol 类型的属性
2. 深拷贝
- 什么是深拷贝
- 深拷贝就是完全拷贝一份新的对象,会在堆内存中开辟新的空间,主要针对的是引用数据类型,拷贝的对象修改后,原对象不会受影响
- 如何实现深拷贝
-
- JSON.parse(JSON.stringify()) 缺点: 无法拷贝内部函数
let obj={
name:'张三',
age:22,
fn(){
console.log('123');
}
}
let obj1=JSON.parse(JSON.stringify(obj))
obj1.name='王五'
console.log(obj);
console.log(obj1);
function deepClone1(obj) {
var objClone = Array.isArray(obj) ? [] : {};
if (obj && typeof obj === "object") {
for (key in obj) {
if (obj.hasOwnProperty(key)) {
if (obj[key] && typeof obj[key] === "object") {
objClone[key] = deepClone1(obj[key]);
} else {
objClone[key] = obj[key];
}
}
}
}
return objClone;
}
4.js微任务和宏任务
- js代码执行流程:同步==>事件循环(微任务,宏任务)>微任务>宏任务==>微任务
- js是单线程语言
- 同步任务全部执行完后才会执行事件循环,事件循环包含微任务和宏任务
- 宏任务:promise.then 微任务:定时器(setTimeout…)…
<script>
setTimeout(function () {
console.log(1);
})0
new Promise((resolve) => {
console.log(2);
resolve()
}).then(() => {
console.log(3);
}).then(() => {
console.log(4);
})
console.log(5);
for (var i = 0; i < 3; i++) {
setTimeout(function () {
console.log(i);
}, 1000 * i);
}
</script>