前端面试--持续更新

87 阅读2分钟

JavaScript

JavaScript的数据类型

  1. 数字(Number) 复杂数据类型: Object
  2. 字符串(String)
  3. 布尔(Boolean)
  4. 符号(Symbol)
  5. 空(Undefined)
  6. 空(Null)
  7. BigInt

如何判断数据类型?

typeof 适合基本类型和function类型的检测,无法判断null与object

instanceof适合自定义对象,也可以用来检测原生对象,在不同的iframe 和 window间检测时失效,还需要注Object.create(null)对象的问题

constructor 基本能判断所有类型,除了null和undefined,但是constructor容易被修改,也不能跨iframe使用

tostring能判断所有类型,可将其封装为全能的DataType()判断所有数据类型

垃圾回收机制

对不再使用的内存回收

内存泄漏:全局变量/闭包/dom引用后未及时销毁造成,需手动清除

标记清楚法:将【不再使用的对象】定义为【无法触及的对象】

引用计数算法:一个对象,没有任何变量指向它了,就说明不再需要了,但是引用技术有个致命的缺陷-循环引用造成的内存泄漏无法清除 弊端(循环引用:两个对象通过内部属性指向对方,导致别的变量访问不到他们,也无法释放)

for...of 和 for...in 的区别

都可以用来遍历

for in遍历的是数组的索引(即键名),而for of遍历的是数组元素值

for in总是得到对象的key或数组、字符串的下标

for of总是得到对象的value或数组、字符串的值

HTTP

http协议的三个内容

请求头,请求行,请求体,空行

Vue

key的作用

虚拟DOM结合diff算法,提高浏览器渲染性能

就相当于给虚拟dom加了个标识,当数据发生变化的时候利用key来对比新旧的虚拟dom,找出不同的部分更新视图

Vue2 v-model语法糖

实现数据双向绑定

父组件通过自定义属性value向子组件传值,子组件通过触发父组件input框的input事件向父组件传值

数据双向绑定的原理

通过数据劫持搭配观察者和订阅者模式来完成的,通过object.defineProperty(可以兼容到IE9)来劫持getter和setter的数据,当data中数据发生变化后通过观察者模式通知订阅者完成数据驱动视图的更新.