当前位置:网站首页>JS:为什么 [] == ![] 返回 true ?
JS:为什么 [] == ![] 返回 true ?
2022-07-24 05:17:00 【蛞蝓不孤寡】
首先来看一段代码
[] == ![] //true
'' == ![] //true
1 == ![] //false
0 == ![] //true
![] == false //true
是不是有些云里雾里的?接下来看一张图片:

在这段算法里,和 [] == ![] 匹配的是条件 7,所以调用 [] == ToNumber(false) 进行比较。在 9.3 节中,ToNumber(false) 等于 0,于是比较变为 [] == 0 。
在此处因为 [] 是对象,比较过程走分支 9,依 ToPrimitive([]) == 0 比较。ToPrimitive 默认是调用 toString 方法的(依 8.2.8),于是 ToPrimitice([]) 等于空字符串。
结果,[] == ![] 的比较最后落到了 ‘’==false 上,按照 11.9.3 中的定义会依分支 5 比较 ToNumber(’’)==0 ,ToNumber(’’) 依 9.3.1 等于 0,所以结果为 true。
边栏推荐
猜你喜欢
随机推荐
C语言从入门到入土——函数
A collation of the basic usage of numpy
JS - 计算直角三角形的边长及角度
Generics and annotations
Tabs标签页(el-tabs)_造成页面卡死问题
牛客网刷题
special effects - 鼠标点击,出现烟花炸裂效果
6.在屏幕上绘制一条贝塞尔曲线和一个贝塞尔曲面
MySQL 远程连接错误解决方法
详解浏览器和Node的事件循环机制及区别
C语言进阶篇 一.数据的存储
关于作为行业人从业人员的一点思考
Install pytoch+anaconda+cuda+cudnn
JDBC encapsulates a parent class to reduce code duplication
C语言入门篇 二.函数
T 1-5
special effects - 鼠标点击,出现随机设置的文字
空杯心态,重新开始
Introduction to threads
栈与队列的互相实现(C)









