JavaScript
JavaScript的数据类型
- 数字(Number) 复杂数据类型: Object
- 字符串(String)
- 布尔(Boolean)
- 符号(Symbol)
- 空(Undefined)
- 空(Null)
- 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中数据发生变化后通过观察者模式通知订阅者完成数据驱动视图的更新.