最新的关于比较符运算的地址关于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 尊重作者辛苦劳动成果,转载请注明出处,谢谢!

 

 

 

 

 

 

 

 

 

 

posted on 2012-11-08 18:12  深海大虾  阅读(607)  评论(0编辑  收藏  举报