• 为什么 [] == ![] 输出是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。

      原来答案就是这么来的。

  • 相关阅读:
    Dephi XE 编译后执行文件的路径怎么改
    一名Delphi程序员的开发习惯
    Delphi AnimateWindow 用法 淡入淡出窗口
    Delphi开发DLL
    delphi 中配置文件的使用(*.ini)
    Delphi中根据分类数据生成树形结构的最优方法
    Delphi語法筆記
    2015年10月19日 做过的面试题(四)
    ios 客户端定位的3种方法
    常用开源镜像站整理android sdk manager
  • 原文地址:https://www.cnblogs.com/liaoing/p/14237880.html
Copyright © 2020-2023  润新知