• 为什么 [] == ![] 输出是true?


    看到群里发的一个问题,为什么 [] == ![] 输出是true?

    看到了第一反应是黑人问号脸?但是得信,JavaScript无所不坑,就试着去寻找答案。

    1. ! 的优先级比 == 要高,所以会先执行 ! [] 。

      ! [] :是[]取反,[]的转换成布尔值类型是:true ,因为:空字符串' ',undefined, null, 0,NaN。除了这5个外,其他所有值转布尔类型都是true。
      因此:右边 ![] 变成了 false

    2. 当==两边其中一个是布尔值的话,先把布尔值转换为数字。false转换成数字是0
      因此:右边 ![] 变成了 0

    3. 当==的一边是字符串或数字,另一边是对象的时候(数组也是对象),先把对象值转换为原始值再判断相等。

      步骤如下:

      • 对象先调用valueOf()方法,如果此方法返回的是原始值,则对象转为这个原始值。

      • 如果valueOf方法返回的不是原始值,则再调用toString方法,如果toString方法返回的是原始值,则对象转换为这个原始值。

      • 如果valueOf和toString方法均没有返回原始值,则抛出异常。

      这里左边[]调用valueOf方法即[].valueOf() 返回的是:[] ;

      继续调用toString方法即[].toString() 返回的是:'' 空字符串

    4. 现在左边就是'' 右边是 0
      两边一个是字符串一个是数字的时候,先把字符串转为数字,再进行比较。空字符串 '' 转成数字为0

    5. 最后就变成了 0 == 0 这肯定是true。

      原来答案就是这么来的。

  • 相关阅读:
    tcp 粘包 和 TCP_NODELAY 学习
    分解抓取的包文件代码实现学习
    谨慎使用多线程中的fork 学习!!!!
    面试题
    Java并发编程:Lock
    为什么匿名内部类参数必须为final类型
    sql 面试题
    java hashCode方法返回值
    数组初始化
    Java内存模型
  • 原文地址:https://www.cnblogs.com/liaoing/p/14237880.html
Copyright © 2020-2023  润新知