奇妙的输出,其实不奇妙
首先,给出一个奇妙的输出。如下:
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
测试以下,完全正确。
总结,有时候,看似不符合常理的东西,只要我们静下心来,认真思考,你会发现,这就是常理!
世间万物也一样,存在即合理,发生及必然,境界到了,自然就到了!