建站学 - 轻松建站从此开始!

建站学-个人建站指南,网页制作,网站设计,网站制作教程

JS关于2<1<3的输出结果,一个好玩的小包袱

时间:2012-05-04 22:48来源: 作者: 点击:
昨天看到一位前辈的微博状态,大抵是这么一道题目: (function(a) {   alert(2<a<3);   })(1); 好奇之下先执行了一边结果是弹出窗口为true。 按逻辑来来想也不对啊,2<1<3怎么也应该是false吧,这个问题一下就好玩了。 仔细想了想ECMA的语法解析顺序,
昨天看到一位前辈的微博状态,大抵是这么一道题目:

(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)
织梦二维码生成器
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 验证码:点击我更换图片