首先,“!”是取反操作,空数组是对象,对象为真,取反之后就为false了。
全州ssl适用于网站、小程序/APP、API接口等需要进行数据传输应用场景,ssl证书未来市场广阔!成为创新互联的ssl证书销售渠道,可以享受市场价格4-6折优惠!如果有意向欢迎电话联系或者加微信:18982081108(备注:SSL证书合作)期待与您的合作!
然后,相等运算符的比较有指定的规则,具体请参阅诸如《JavaScript权威指南》或者《JavaScript高级程序设计》等书目。其中有两条指出:
有了以上两条作为基础,我们再来看问题。
控制台指出等号右边为布尔值,由第一条可知,它将转换为数字0,也就是数字类型。
现在变成了空数组和数字 0 的比较。由第二条可知,空数组会首先调用valueOf()方法,但是这里需要注意的是:数组、函数和正则表达式调用valueOf()方法后,只返回对象本身。
所以,继续调用toString()方法,空数组调用toString()后,众所周知会返回 0 ;于是两边相同。也就是为什么有了后面所示结果的原因了。"" == ![] //true1 == ![] // false0 == ![] // true可以一句话概括:任意值与布尔值之间的比较都是数字0和1之间的比较。
"" == ![] //true
1 == ![] // false
0 == ![] // true
可以一句话概括:任意值与布尔值之间的比较都是数字0和1之间的比较。
首先,== 的定义是:
GetValue 会获取一个子表达式的值(消除掉左值引用),在表达式 [] == ![] 中,[] 的结果就是一个空数组的引用,而 ![] 就有意思了,它会按照 11.4.9 和 9.2 节的要求得到 false。
在这段算法里,和「[] == ![]」匹配的是条件 7,所以会递归地调用「[] == ToNumber(false)」进行比较。在 9.3 节中定义了 ToNumber 原语,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。
文章出自:前端餐厅,如有转载本文请联系前端餐厅今日头条号。
github:https://github.com/zuopf769
网页题目:[]==![]答案为什么会是True?
本文地址:http://www.csdahua.cn/qtweb/news33/285633.html
网站建设、网络推广公司-快上网,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 快上网