奇妙的输出,其实不奇妙

首先,给出一个奇妙的输出。如下:

alert(1<2<3)   // true

alert(3>2>1)   // false

啊哈,换了一个方向,怎么就输出不一样了?好奇妙的样子!

其实认真分析一下,也就是正常的输出了,一点儿也不奇妙!

首先,我们要知道在javascript中,undefined, null, 0, '', false,使用真值判断均为false。

而JS的基本数据类型有Undefined,Null,Number,String,Boolean,对应着,每种数据类型都有相应的false的值。(意淫出来的,没查到文档)

然后呢,就是JS中关系操作符(<,>,<=,>=)进行比较的时候,会对两边的值做一些转换,规则如下:

如果两个操作数都是数值,则执行数值比较;
如果两个操作数都是字符串,则比较两个字符串的对应字符编码的值;
如果一个操作数是数值,则将另一个操作数转换为一个数值,然后执行数值比较;
如果一个操作数是对象,则调用这个对象的valueOf()方法,用得到的结果按照前面的规则进行比较。如果对象没有valueOf()方法,则调用toString()方法,然后进行比较;
如果操作数是一个布尔值,则将其转换为数值,然后进行比较。

现在,我们分析上面那个奇妙不奇妙的输出:

3 > 2 会输出 true

然后 true 会转换成 1

然后比较 1 > 1 ,输出false

如果分析正确的话,那么:

3>2>=1 将会输出为 true

测试以下,完全正确。

总结,有时候,看似不符合常理的东西,只要我们静下心来,认真思考,你会发现,这就是常理!

世间万物也一样,存在即合理,发生及必然,境界到了,自然就到了!

posted @ 2015-01-04 16:39  myqianlan  阅读(339)  评论(3编辑  收藏  举报