第一眼看到这个标题,[]==![] ,估计想到的都是false吧。 但是alert([]==![]) ,会神奇的发现,它居然是true。这到底是怎么回事呢? 首先,分解一下这个表达式。 []==![] 由以下几步完成判断。 1、求值![] 2、参考ECMAScript文档(以下简称文档)11.4.9 Logical NOT Operator ( ! ) ,!运算符首先对[]进行toBoolean([])操作,文档9.2中得知,如果参数是Object,则返回true。于是 ![] 最后 得值 false 3、表达式变为[]==false 4、参考文档11.9.3 The Abstract Equality Comparison Algorithm,根据规则,第七条 If Type(y) is Boolean, return the result of the comparison x == ToNumber(y). 由于我们的右边的是个布尔值,所以对false进行toNumber(false)操作,文档9.3 ToNumber中,可知如果是false,那么toNumber返回0 5、表达式变为[]==0 6、继续看文档11.9.3,我们来到了第九条:9. If Type(x) is Object and Type(y) is either String or Number,return ...Read More
檬檬前端行
路漫漫其修远兮
近期评论