zoukankan      html  css  js  c++  java
  • js中关于假值和空数组的总结

    先上x==y运算符的算法细节:

    1. 如果x不是正常值(比如抛出一个错误),中断执行。
    2. 如果y不是正常值,中断执行。
    3. 如果Type(x)Type(y)相同,执行严格相等运算x === y
    4. 如果xnullyundefined,返回true
    5. 如果xundefinedynull,返回true
    6. 如果Type(x)是数值,Type(y)是字符串,返回x == ToNumber(y)的结果。
    7. 如果Type(x)是字符串,Type(y)是数值,返回ToNumber(x) == y的结果。
    8. 如果Type(x)是布尔值,返回ToNumber(x) == y的结果。
    9. 如果Type(y)是布尔值,返回x == ToNumber(y)的结果。
    10. 如果Type(x)是字符串或数值或Symbol值,Type(y)是对象,返回x == ToPrimitive(y)的结果。
    11. 如果Type(x)是对象,Type(y)是字符串或数值或Symbol值,返回ToPrimitive(x) == y的结果。
    12. 返回false

    1、“假值”总共只有6个:
    false,undefined,null,0,""(空字符串),NaN
    除此之外的所有值,都是“真值”,即在逻辑判断中可以当true来使用

    用代码表示:

    if(false&&undefined&&null&&0&&""&&NaN){
        console.log('其中有真值');
    }else{
        console.log('全部都是假值');
    }
    //全部都是假值

    2、对于空数组和空对象的疑惑

    疑惑来源:用空数组和空对象进行if语句判断为true,但是空数组和true进行==运算时,返回的是false

    用代码表示:

    if([]){
        console.log('空数组转化为布尔值为true');//空数组转化为布尔值为true
    }
    if({}){
        console.log('空对象转化为布尔值为true');//空对象转化为布尔值为true
    }
    if([]==true){
        console.log('空数组等于true');
    }else{
        console.log('空数组等于false');//空数组等于false
    }

    为什么空数组转化为布尔值是true,而下面和true做对比时又不等于true呢?

    原因分析:if ([ ]) {} 里发生自动类型转换,[ ] => Boolean,从object到布尔型,结果是true。事实上,所有的object转型到Boolean,都是true,[ ]和{ }都是对象。

          [ ] == true 里不发生自动类型转换,这条语句只比较左右的“”是否相等,所以要先化为number类型,true转化为数字1就不用说了,主要分析一下[ ]怎么转化为0的,这里涉及到ToPrimitive方法的操作,不懂的可以先看我的另一篇博客,https://i.cnblogs.com/EditPosts.aspx?postid=10859000,再返回看。[ ]会先调用valueOf方法,返回数组本身不是原始值,所以继续调用toString方法,返回' ',从而Number(' ')=0,而0!=1,所以返回false。

    总结:Boolean([ ]) => true;//直接作条件
       Boolean(Number([ ])) => false;//当与布尔值做比较时

       Number({ })//NaN,不等于任何数包括自己

    最后送大家一张经典的图:

  • 相关阅读:
    奇偶数排序
    买房子
    首字母大写
    学分绩点
    加减乘除
    最简真分数
    Hdu 1058 Humble Numbers
    Hdu 1032 The 3n + 1 problem
    Hdu 1040 As Easy As A+B
    Hdu 1025 Constructing Roads In JGShining's Kingdom
  • 原文地址:https://www.cnblogs.com/liutianzeng/p/10796550.html
Copyright © 2011-2022 走看看