zoukankan      html  css  js  c++  java
  • 奇妙的输出,其实不奇妙

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

    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

    测试以下,完全正确。

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

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

  • 相关阅读:
    【Web】JavaScript 语法入门
    tar 和gzip 的区别
    状态码,好记
    PyCharm与git/GitHub取消关联
    在Ubuntu下安装deb包需要使用dpkg命令
    linux每日命令(4):解压命令
    Python之os.path.join()
    Python的JAVA胶水——jpype
    python之chardet验证编码格式
    python之arrow时间处理模块
  • 原文地址:https://www.cnblogs.com/myqianlan/p/4201483.html
Copyright © 2011-2022 走看看