1. [] == ![]结果是什么?为什么?
结果是:true
解析原因:
// Boolean(undefined/null/0/NAN/空串)===false, Boolean(对象)===true
== 中,左右两边都需要转换为数字然后进行比较。
左边:[]转换为数字为0。
右边:![] 首先是转换为布尔值,由于[]作为一个引用类型转换为布尔值为true,因此![]为false,进而在转换成数字,变为0。
所以:0 == 0 , 结果为true
2. JS中类型转换有哪几种?
JS中,类型转换只有三种:
1.转换成数字
2.转换成布尔值
3.转换成字符串
转换具体规则如下:

3. == 和 ===有什么区别?
规则如下:
1.两边的类型是否相同,相同的话就比较值的大小,例如1==2,返回false
2.判断的是否是null和undefined,是的话就返回true
3.判断的类型是否是String和Number,是的话,把String类型转换成Number,再进行比较
4.判断其中一方是否是Boolean,是的话就把Boolean转换成Number,再进行比较
console.log({a: 1} == true);
console.log({a: 1} == "[object Object]");
null==undefined
'1'==1
true==1
4. 事件流向
(1)冒泡:子节点一层层冒泡到根节点
(2)捕获顺序与冒泡相反
(3)addEventListener 最后个参数 true 代表捕获反之代表冒泡
(4)阻止冒泡不停止父节点捕获
5. 事件委托
参考定义:事件委托就是利用事件冒泡,只指定一个事件处理程序,就可以管理某一类型的所有事件
好处:给重复的节点添加相同操作,减少 dom 交互,提高性能
实现思路:给父组件添加事件,通过事件冒泡,排查元素是否为指定元素,并进行系列操作