1. js的数据类型及检测方式
- js数据类型分为两大类
- 基本类型:string number boolean undefind unll (symbol bigint)
- 引用类型:Object(Array Function Data…)
- NaN是一个数值类型,但不是具体的数字
- 检测方式:
- typeof() 适用于基本数据类型, 数组指向Object
console.log(typeof ([1, 2, 3]));
- instanceof() 只能判断引用数据类型 不能判断基本数据类型
console.log([] instanceof Array);
console.log('123' instanceof String);
console.log(('123').constructor === String);
- Object.protptype.toString.call() 原型链???
var opt = Object.prototype.toString
console.log(opt.call(1));
console.log(opt.call('1'));
console.log(opt.call(true));
console.log(opt.call([]));
console.log(opt.call({}));
- 判断各种情况的数据类型
<script>
console.log(true + 1);
console.log(true - 1);
console.log('a' + 1);
console.log('a' - 1);
console.log('a' + true);
console.log('a' - true);
console.log('a' + undefined);
console.log('a' - undefined);
console.log(1 + undefined);
console.log(1 - undefined);
console.log(true + undefined);
console.log(true - undefined);
</script>
2. 闭包
- 什么是闭包
- 函数嵌套函数,内部函数被外部函数返回并保存下来时,就会产生闭包
function fn(a) {
return function () {
console.log(a);
}
}
var fo = fn('1234')
fo()
- 闭包的特点
- 可重复利用变量
- 此变量不会污染全局
- 变量一直保存在内存中,不会被垃圾回收机制回收
- 闭包的缺点
- 闭包较多时,会消耗内存,导致页面性能下降,甚至IE浏览器会导致内存泄漏
- 闭包使用场景
3. 前端内存泄漏
- 什么是内存泄漏
- js里已分配内存地址的对象,由于长时间没有释放或无法清除,造成长期占用内存现象,使内存资源大幅度浪费,导致运行速度缓慢,甚至崩溃
- 内存泄漏的因素
- 一些声明赋值的变量
- 未被清除的引用元素
- 未清空的定时器
- 过度的闭包
- 解决的方法
4. 事件委托
- 什么是事件委托(事件代理)
- 原理是利用的事件冒泡的机制实现,把子元素的事件绑定到了父元素身上
- 如果子元素阻止了事件冒泡event.stopPropagation(),那么委托也就不成立
- 绑定事件addEventListener(‘click’,函数名,true/false) 这里默认是false(事件冒泡),true(事件捕获)
- 事件委托的好处