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