tanxukun / interview

interview record.
0 stars 0 forks source link

Javascript #4

Open tanxukun opened 2 years ago

tanxukun commented 2 years ago

POST的Content-Type常见

Event Loop事件循环机制

image

宏任务 macro task

MessageChannel

MessageChannel允许我们在不同的浏览上下文,比如window.open()打开的窗口或者iframe等之间建立通信管道,并通过两端的端口(port1和port2)发送消息。MessageChannel以DOM Event的形式发送消息,所以它属于异步的宏任务。 image

在Vue中的使用

Vue的nextTick的实现经过了多次的调整。在Vue2.5以前,nextTick优先使用微任务Promise来实现。到了2.5版本,Vue引入MessageChannel,nextTick的实现优先使用setImmediate,平台不支持则使用MessageChannel,再不支持才使用Promise,最后用setTimeout兜底。

在React中的使用

由于requestIdleCallback工作帧率低,只有20FPS,还有兼容问题,React并没有使用它,而是用requestAnimationFrame和MessageChannel进行polyfill。

tanxukun commented 1 year ago

==比较规则

从上到下按照规则比较,直到能得到确切结果为止

  1. 两端类型相同,直接比较值 1 == 1, 'a' == 'a'
  2. 两端存在NaN,返回false NaN == 任意(返回false)
  3. undefined和null只和自身或者相互比较,才返回true undefined == null(true), null == null(true), undifined == undefined(true), undefined == 其他(false)
  4. 一端是原始类型,一端是对象类型,把对象转换成原始类型后进行第4步

对象如何转原始类型

  1. 如果对象拥有[Symbol.toPrimitive]方法,则调用该方法,如果该方法返回原始类型值,则使用该原始值,否则抛出异常(Cannot convert xxx to primitive value)
  2. 调用对象的valueOf方法,如果该方法返回原始类型值,则使用该原始值,否则进入下一步
  3. 调用对象的toString方法,如果该方法返回原始类型值,则使用该原始值,否则抛出异常(Cannot convert xxx to primitive value)