模范爸爸|「干货满满」1.5w字初中级前端面试复习总结( 四 )

对ES6语法的了解常用:let、const、扩展运算符、模板字符串、对象解构、箭头函数、默认参数、Promise
数据结构:Set、Map、Symbol
其他:Proxy、Reflect
Set、Map、WeakSet、WeakMapSet:

  • 成员的值都是唯一的 , 没有重复的值 , 类似于数组
  • 可以遍历
WeakSet:
  • 成员必须为引用类型
  • 成员都是弱引用 , 可以被垃圾回收 。 成员所指向的外部引用被回收后 , 该成员也可以被回收
  • 不能遍历
Map:
  • 键值对的集合 , 键值可以是任意类型
  • 可以遍历
WeakMap:
  • 只接受引用类型作为键名
  • 键名是弱引用 , 键值可以是任意值 , 可以被垃圾回收 。 键名所指向的外部引用被回收后 , 对应键名也可以被回收
  • 不能遍历
箭头函数和普通函数的区别
  1. 箭头函数的this指向在编写代码时就已经确定 , 即箭头函数本身所在的作用域;普通函数在调用时确定this 。
  2. 箭头函数没有arguments
  3. 箭头函数没有prototype属性
PromisePromise 是ES6中新增的异步编程解决方案 , 避免回调地狱问题 。 Promise 对象是通过状态的改变来实现通过同步的流程来表示异步的操作, 只要状态发生改变就会自动触发对应的函数 。
Promise对象有三种状态 , 分别是:
  • pending: 默认状态 , 只要没有告诉 promise 任务是成功还是失败就是 pending 状态
  • fulfilled: 只要调用 resolve 函数, 状态就会变为fulfilled, 表示操作成功
  • rejected: 只要调用 rejected 函数, 状态就会变为 rejected, 表示操作失败
状态一旦改变既不可逆 , 可以通过函数来监听 Promise 状态的变化 , 成功执行 then 函数的回调 , 失败执行 catch 函数的回调
浅拷贝浅拷贝是值的复制 , 对于对象是内存地址的复制 , 目标对象的引用和源对象的引用指向的是同一块内存空间 。 如果其中一个对象改变 , 就会影响到另一个对象 。
常用浅拷贝的方法:
  • Array.prototype.slice
let arr = [{a:1}, {b:2}]let newArr = arr1.slice()
  • 扩展运算符
let newArr = [...arr1]深拷贝深拷贝是将一个对象从内存中完整的拷贝一份出来 , 对象与对象间不会共享内存 , 而是在堆内存中新开辟一个空间去存储 , 所以修改新对象不会影响原对象 。
常用的深拷贝方法:
  • JSON.parse(JSON.stringify())
JSON.parse(JSON.stringify(obj))
  • 手写深拷贝
function deepClone(obj, map = new WeakMap()) {if (obj === null || typeof obj !== "object") return obj;const type = Object.prototype.toString.call(obj).slice(8, -1)let strategy = {Date: (obj) => new Date(obj),RegExp: (obj) => new RegExp(obj),Array: clone,Object: clone}function clone(obj){// 防止循环引用 , 导致栈溢出 , 相同引用的对象直接返回if (map.get(obj)) return map.get(obj);let target = new obj.constructor();map.set(obj, target);for (let key in obj) {if (obj.hasOwnProperty(key)) {target[key] = deepClone(obj[key], map);}}return target;}return strategy[type]let later = (arg) => setTimeout(()=>{func.apply(ctx, arg)timer = ctx = null}, wait)return function(...arg){if(!timer){timer = later(arg)ctx = thisif(immediate){func.apply(ctx, arg)}}else{clearTimeout(timer)timer = later(arg)}}}节流节流用于减少函数请求次数 , 与防抖不同 , 节流是在一段时间执行一次 。