我不知道的js

整理一些没用过的 api

Array.flat

扁平化遍历数组

1
2
3
4
[23, [4,5], [4, [3, 4, 5]]].flat()
// (5) [23, 4, 5, 4, Array(3)]
[23, [4,5], [4, [3, 4, 5]]].flat(1)
// [23, 4, 5, 4, 3, 4, 5]

参数代表了要遍历的深度

Set结构

类似于数组,但其内部成员是不可重复的,可以用来去重

1
2
Array.form(new Set([2,3,4,4,4,4]))
// [2,3,4]

http2的多路复用

http1.0的问题

  • 1,相同域名下的不同资源,要发多次请求,每次请求都要经过TCP三次握手,浪费时间。(虽然Keep-alive可以解决这个问题,)
  • 2,请求头过大
  • 3,没有服务端推送
    Keep-alive: 浏览器最多同时发起六个请求,实际并发数 = 服务器最大并发数 / 6。

http2 引入流的概念,同一域名只建立一个http请求。压缩了请求头,引入了服务端推送。

React 和 Vue 的 diff 时间复杂度从 O(n^3) 优化到 O(n) ,那么 O(n^3) 和 O(n) 是如何计算出来的?

N^3 首先,第一棵树的每一个节点,都要和第二棵数的每一个节点进行对比,这是O(n^2),其次,要计算树的最小转化路径。

React 认为,Dom运算很少会出现跨层级别的移动,因此只将树按层进行对比。它还做了优化:不同的节点类型直接进行替换、key……

介绍下前端加密的常见场景和方法

sessionId

vue 在 v-for 时给每项元素绑定事件需要用事件代理吗?为什么

需要,虽然大多数情况都会给每项绑定同样的回调事件,但还是会创建多个监听器。

双向绑定的两种实现方法

Object.definePrototype
Proxy

介绍下 HTTPS 中间人攻击

迭代器

如何让对象支持迭代器

Reflect

Array.prototype.sort 的回调参数

使用 JavaScript Proxy 实现简单的数据绑定

HTTPS 握手过程中,客户端如何验证证书的合法性

React Vue 原理 diff算法

// https://juejin.im/post/5d8a49d26fb9a04ddf2c25d6