美文网首页
空数组的判断问题([]==false)

空数组的判断问题([]==false)

作者: 雨未浓 | 来源:发表于2019-10-20 00:09 被阅读0次

    先抛出两个问题:
    1.[]==false 是否成立
    2.if([]){ console.log('123') } 能否打印

    结果:其实第一个是成立的,第二个也是能打印的,那么问题来了,既然空数组等于false成立,为什么还能执行if里的语句呢?

    要解答这个看似矛盾的问题,需要从相等操作符和if语句的条件表达式说起

    相等操作符比较规则
    1.如果有个操作数是布尔值,则在比较相等性之前,先将其转为数值,false->0,true->1
    2.如果一个操作数是字符串,另一个操作数是数值,在比较相等性之前,先将字符串转为数值
    3.如果一个操作数是对象,另一个操作数不是,则调用对象的valueOf()方法,用得到的基本类型值按照前面的规则进行比较
    4.null和undefined是相等的,且在比较之前不能将其转换为其他任何值
    5.如果一个操作数是NaN,则相等操作符返回false,注意NaN不等于NaN
    6.如果两个操作数都是对象,则比较它们是不是同一对象,如果两个操作数都指向同一个对象,则相等操作符返回true,否则返回false
    额外点:===仅比较而不转换
    第一个问题可以用以上的3和1来解答

    [].valueOf()   //返回数组对象本身
    Number(false)    //0
    Number([].valueOf())   //0
    

    if语句的条件表达式,js会自动调用Boolean()将条件表达式转换为布尔值

    Boolean([])   //true    故第二个问题可以打印
    

    对于任何不是null的对象,Boolean()都可将其转换为true
    那么再抛一个问题:
    if(-1){ console.log('123') } 会打印吗
    其实同样会打印
    注意:对于数字类型的值,除了0和NaN,Boolean()都可将其转换为true

    相关文章

      网友评论

          本文标题:空数组的判断问题([]==false)

          本文链接:https://www.haomeiwen.com/subject/saqomctx.html