console.log([] == ![]) // true
???,咋回事
这个是正确的,这就是数据类型隐式转化的魅力了,偷偷的就把你骗了
献上验证过程:
第一步:根据运算符的优先级,!先执行,[]是一个对象,所以![]转化为false
第二步:根据类型转换规则第一条——“如果一个运算数是Boolean值,在检查相等性之前,把它转化成数字值。false转化成0,true转换为1。”。所以false转换成0
第三步:根据类型转换规则第三条——“如果一个运算数是对象,另一个是字符串,在检查相等性之前,要尝试把对象转换成字符串。”。左边的[]调用toString(),转换成空字符串’’
第四步:根据类型转换规则第二条——“如果一个运算数是字符串,另一个是数字,在检查相等性之前,要尝试把字符串转换成数字。”。’'转化成0。(左边得到0)
第五步:比较两边大小0==0,因此结果为true
隐式转化[]==![]
最新推荐文章于 2022-11-16 15:13:52 发布