js小众面试题

76 阅读2分钟

1. [] == ![]结果是什么?为什么?

结果是:true
解析原因:  
    // Boolean(undefined/null/0/NAN/空串)===false, Boolean(对象)===true
    == 中,左右两边都需要转换为数字然后进行比较。  
    左边:[]转换为数字为0。  
    右边:![] 首先是转换为布尔值,由于[]作为一个引用类型转换为布尔值为true,因此![]为false,进而在转换成数字,变为0。  
    所以:0 == 0 , 结果为true

2. JS中类型转换有哪几种?

JS中,类型转换只有三种:  
        1.转换成数字  
        2.转换成布尔值  
        3.转换成字符串  
转换具体规则如下:

image.png

3. == 和 ===有什么区别?

//===叫做严格相等,是指:左右两边不仅值要相等,类型也要相等,例如'1'===1的结果是false,因为一边是string,另一边是number
//==不像===那样严格,对于一般情况,只要值相等,就返回true,但==还涉及一些类型转换,它的转换  
规则如下:  
    1.两边的类型是否相同,相同的话就比较值的大小,例如1==2,返回false  
    2.判断的是否是nullundefined,是的话就返回true  
    3.判断的类型是否是StringNumber,是的话,把String类型转换成Number,再进行比较  
    4.判断其中一方是否是Boolean,是的话就把Boolean转换成Number,再进行比较  
        console.log({a: 1} == true);//false  
        console.log({a: 1} == "[object Object]");//true
        null==undefined  //true
        '1'==1  //true
        true==1  //true

4. 事件流向

1)冒泡:子节点一层层冒泡到根节点  
(2)捕获顺序与冒泡相反  
(3)addEventListener 最后个参数 true 代表捕获反之代表冒泡  
(4)阻止冒泡不停止父节点捕获  

5. 事件委托

参考定义:事件委托就是利用事件冒泡,只指定一个事件处理程序,就可以管理某一类型的所有事件

好处:给重复的节点添加相同操作,减少 dom 交互,提高性能 

实现思路:给父组件添加事件,通过事件冒泡,排查元素是否为指定元素,并进行系列操作