隐式转换[] == ? {} == ? 弄懂这些应该差不多了

只考虑a ==  b进行隐式转换的情况

1.字符串与数字比较
    字符串转换成数字再进行比较
2.字符串(或数字)与布尔值比较
    布尔值先转换成0或1再进行比较
3.对象与布尔值比较
对象通过toString()进行转换,布尔值转换为0或1, 两者再进行比较
(对象通过toString()转换后为"[object Object]",这个应该比较眼熟,如alert一个对象时,弹窗总出现"[object Object]",因为alert方法参数要为字符串)
4.数组与布尔值比较
数组转换成数字,布尔值转换成数字,两者再进行比较
(空数组[]转换成数字后为0)
5.数组或对象与字符串或数字比较
数组转换成数字
对象通过toString()进行转换
6.数组和数组比较、对象和对象比较,或者说引用值与引用值比较,那么它们的引用地址不同,所以不会相等。用一个变量比较一定相等,因为同一个引用地址。
7.遇到!非运算符,则先进行布尔转换再进行非运算
8.if判断,会对括号内的内容进行Boolean()转换

9.NaN == NaN    ===> false 这个好理解,非数那就是除number之外的任何一种数据类型,这肯定不能相等。

10.null == null、undefined == undefined、null == undefined都为true,  感觉一无所有,四海为家,都是一家子人。等式两边估计都转换成了布尔值。

 总结一哈:遇见boolean先转成0或1再说;
                  0、""、null、undefined、false、NaN转换成boolean为false,其他为true;

                  false转换成数字为0,true转换成数字为1;


    const obj = {};
    const arr = [];
    const obj1 = { name: "deng" };
    const str = "true";
    if (obj == true) {  // "[object Object]" == 1  ==> false
      console.log(1);
    }
    if (obj == false) { // "[object Object]" == 0  ==> false
      console.log(2);
    }
    if (obj1 == true) { // "[object Object]" == 0  ==> false
      console.log(3);
    }
    if (obj) {          // Boolean(obj) ==> true
      console.log(4);  
    }
    if (obj1) {         // Boolean(obj) ==> true
      console.log(5);  
    }
    if (str == true) {  // "true" == 1  ==> false
      console.log(6);
    }
    if (arr) {          // Boolean(arr)  ==> true
      console.log(7);
    }
    if (arr == true) {  // "" == 1  ==>  0 == 1  ==> false 
      console.log(8);
    }
    if (obj == arr) {   // false
      console.log(9);
    }
    if (obj == obj) {   // 同一个变量,引用地址相同  ==> true
      console.log(10);
    }
    if ({} == {}) {     // 引用地址不同  ==> false
      console.log(11);
    }
    if (arr == arr) {   // 同一个变量,引用地址相同  ==> true
      console.log(12);
    }
    if ([] == []) {     // 引用地址不同  ==> false
      console.log(13);
    }
    if ([] == ![]) {    // 0 == !true  ==>  0 == false  ==>  0 == 0  ==> true
      console.log(14);
    }
    if ({} == !{}) {    // "[object Object]" == !true  ==> "[object Object]" == false  ==> "[object Object]" == 0  ==> false
      console.log(15);
    }


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值