客户端|金三银四难道可以不知道这些?( 三 )


解构其实还可以用于数组的结构 , 例如React 16.8 新推出的hook特性 , 如果是一个数组使用解构的话 , 是不局限于变量名 , 是根据索引进行解构的 。
说一下数组的常用方法

  • pop() 删除最后一项
  • map() 循环数组 , 具有返回值 ,不会对原数组造成影响
  • filter() 筛选数组 , 具有返回值 ,不会对原数组造成影响
  • shift() 删除第一项
  • unshift() 向数组的头部添加元素 。
  • forEach 循环数组 , 对原数组会造成影响
  • splice 切割数组
可以说下你对forEath 和 map 的理解吗forEach的循环是不可以打断的 , 底层是会创建很多Promise的进行循环 , 如果要强制打断的话 , 可以使用try catch 去中断循环 , 如果做一些修改数组的操作 , 将会改变原数组
map的循环是不会对原数组造成影响的 。 map的底层其实是嵌套的for循环 。
其实使用forEath和map , 主要是根据场景进行使用的 。
说下你对Promise的理解 , Promise与 async await的区别Promise 是JS对异步的一个解决方式 , 可以通过.then的方式去获取执行成功的结果 , 也可以通过rejected去捕获错误 。
Promise.all() 会等所有的异步执行结束后才会返回
Promise.race() 一个执行完毕机会返回结果
Promise 和 async await 都是JS对异步的解决方案 , 对于Promise来说 , 我们如果在一个逻辑里面频繁的处理异步现成 , 可能会导致回调地狱的出现 。 而且Promise的写法也不够简洁 。 async await 对于我们来说 , 在代码方法 , 是不会造成回调地狱的 , 而且代码会更简洁 。 同时 async await 可以通过try catch捕获错误 。
可以说下你对for of 和for in 的理解吗for..in迭代的是对象的键的列表
for in 可以遍历对象 , 数组 , 字符串类型 。
  • 遍历对象 key 是键
  • 遍历数组 key 是索引
  • 遍历字符串 key 是下标
  • 其他类型无法进行判断
for..of则迭代对象的键对应的值
for of 可以遍历对象 , 数组 , 字符串类型 。
  • 遍历对象 要通过 Object.keys()进行转化
  • 遍历数组的是数组的值
  • 遍历字符串的是字符串的单个值
  • 其他类型无法进行判断
数组去重你通常用什么方法 , ES6 Set方式后的数组可以使用forEach吗?数组在ES6之前 , 通常是对数组进行一个循环 , 去除相同的元素 。
ES6新推出了Set方式 , 我们可以通过Set 方式去达到一个去重的目的 。 但是Set以后返回的是一个Set对象 , 这个Set对象可以使用forEach方法 , 但是不可以使用map方法 , 如果要使用map方法 , 我们需要通过Array.from(arr)去将其转化成一个数组
说一下你对原型链的理解原型链基本分为三个部分
  • 构造函数
  • 实例
  • 原型对象
构造函数new 出来一个实例 , 这个实例的proto指向了原型对象 , 构造函数的prototype指向了原型对象 , 原型对象通过constructor指向构造函数 。
每个实例都可以通过proto去向上寻找自己的原型对象 , 直到找到null 原型链结束
说一下什么是闭包闭包是指有权访问另一个函数作用域中的变量的函数
闭包可能会导致内存泄漏 , 循环调用的变量并不能被浏览器的GC算法所识别并回收 , 需要开发者手动将这个变量设置为null , 才可以进行内存释放 。