昨天看到一位前辈的微博状态,大抵是这么一道题目: (function(a) { alert(2<a<3); })(1); 好奇之下先执行了一边结果是弹出窗口为true。 按逻辑来来想也不对啊,2<1<3怎么也应该是false吧,这个问题一下就好玩了。 仔细想了想ECMA的语法解析顺序,这道题目应该比较的是(2<1)<3的问题。 那么问题又来了,为什么false会<3呢? 请教了前辈,得到的解释是这是早期js自己定义的规范。这个规范就值得琢磨了,是boolean都小于number吗? 于是乎做了简单的尝试: (function(a) { alert(1<a<3); })(2); 结果仍然是true,似乎结论就是boolean<number。 按理说这样就可以草草得出一个结果了,但还是多想了想,试了另一组数: (function(a) { alert(2<a<1); })(1); 问题来了,这次的结果竟然是false。也就是说,并不是我所想当然的boolean<number的情况。 随后的试验清晰了起来,我连续做了几次判定: 复制代码 (function(a) { alert((2<a)==0); })(1); (function(a) { alert((2<a)==1); })(1); (function(a) { alert((2>a)==2); })(1); (function(a) { alert((2>a)==1); })(1); 复制代码 在JS中,boolean转换后变为false的数值有:0、-0、null、""、false、undefined、NaN,其余的所有数值转换为boolean类型后都为true。但不是说boolean的true就是等于除了可以转换为false的数值以外的任何数值。在数值比较之中,它会默认为1。 似乎说了一堆废话,大家看着玩玩吧。。。 (责任编辑:admin) |