一道关于js类型转换的面试题?

if([] == false){console.log('a')}
if({} == false){console.log('b')}
if([] == {}){console.log('c')}
if([]){console.log('d')}

这几道题的隐式转换的方式大神帮忙解答下吧

阅读 790
评论
    3 个回答

    对象和非对象之间的相等比较

    ES5 规范 11.9.3.8-9 做如下规定:

    如果 Type(x) 是字符串或数字, Type(y) 是对象,则返回 x == ToPrimitive(y) 的结果;
    如果 Type(x) 是对象, Type(y) 是字符串或数字,则返回 ToPromitive(x) == y 的结果。

    ToPrimitive就是尝试返回它的原始值,也就是string或者number

    因此:

    1. [] == false,[]会先通过valueOf,得到[],不是原始值,再通过toString,得到""
    2. ({}) == false,同上面步骤,最终的到"[object Object]"
    3. 同上,''!="[object Object]"
    4. 没有==,[]默认为true

    参考:《你不知道的JS(中)》,强烈建议看看,另外给出一个很坑的[]==![],返回true

        • 2.3k

        [], {} 都会隐式转换成 true

          撰写回答

          登录后参与交流、获取后续更新提醒

          相似问题
          推荐文章