zoukankan      html  css  js  c++  java
  • javascript 比较运算符分析

    最新的关于比较符运算的地址关于JS相等比较算法(==)的原理

    看示例

            if ([]) {
                console.log("true")
            }
            if ([] != true) {
                console.log("false")
            }
            //result true false

    []到底是true还是false?

        console.log([] == ![]);
         //result true

    []到底是true还是false?

    继续分析

            console.log(boolean([]));
            //result true

    []是true? 对的 []的确是true。 那为什么会出现前面两种结果呢?

    继续分析

    我们知道表达式都是从左往右计算的

    设原始表达式 0 == 0;

    首先来还原右边

    0 == 0; true

    然后接着推算 

    false == 0; true

    接着

    "" == false; true

    接着

    [] == ""; true

    右边还原完毕

            0 == 0;
            false == 0;
            "" == 0;
            [ ] == 0; 

    接着来还原左边

    [ ] == false; true

    接着

    false == ![]; true

    所以

    [ ] == ![]; true

    左边还原完毕
    //出自http://www.cnblogs.com/ahjesus 尊重作者辛苦劳动成果,转载请注明出处,谢谢!

    最后呈现结果

            0 == 0;
            false == 0;
            "" == 0;
            [] == 0;
            [] == false;
            [] == ![]; 

    原理分析

            //表达式从左往右计算
            [ ] == ![];     //![]转为为bool 
            [ ] == false;   //上一步的结果 两者中有bool,会把 bool 先转换为对应的 number
            [ ] == 0;       //上一步的结果 有一方为number一方为string,会把string转换为数字 [ ].toString()
            "" == 0;        //上一步的结果 把string直接转换为bool的时候,空字符串‘’转换为 false,除此外的一切字符串转换为 true
            false == 0;     //上一步的结果 两者中有bool,会把 bool 先转换为对应的 number
            0 == 0;         //上一步的结果

    总结:

    比较方式遵循如下
    1两者中有bool,会把 bool 先转换为对应的 number
    2有一方为number一方为string,会把string转换为数字 (不是string的会先转成string)
    3把string直接转换为bool的时候,空字符串‘’转换为 false,除此外的一切字符串转换为 true 


    PS:所有数组和对象的bool值都是true,null是false

    以上仅是个人分析,更权威的请查找官方资料,谁找到资料了麻烦留言提供下 谢谢了!

    //出自http://www.cnblogs.com/ahjesus 尊重作者辛苦劳动成果,转载请注明出处,谢谢!

  • 相关阅读:
    C++ 11 右值引用以及std::move
    poj2299--B
    Linux Socket编程注意事项
    Using Qt to build an Omi App for iOS (and Android)
    openwrt 3g模块上网
    详谈隐藏Tabbar的几种方法
    ZOJ 3529 A Game Between Alice and Bob(博弈论-sg函数)
    uva 10574
    【MySQL案例】HA: GTID_MODE配置不一致
    Swift UIView 层次调整
  • 原文地址:https://www.cnblogs.com/ahjesus/p/2760850.html
Copyright © 2011-2022 走看看