zoukankan      html  css  js  c++  java
  • null, undefined,"",0,false是什么关系?


    null本质上和0,"",false是一类东西,它们都表示一种数据类型的非值。正如0表示数字类型的非值,""表示字符类型的非值一样,null表示完全空的对象,即可以把它看成是对象类型的非值,没有任何属性的对象,({}不是完全空的对象,因为它继承了Object.prototype的属性,有一些自带方法。扩展一点,其实null就是Object.prototype的prototype....)因此typeof null返回object是完全合理的。

    而undefined和它们都不同,它表示的就是未定义,还没有初始化,var a,却没有给它赋值,那么它就是undefined。用typeof对它进行操作时,会返回undefined,这表明undefined是自成一派,它是它自己所属数据类型的唯一成员。

    在非严格模式下,由于存在自动类型转换,所以所有基本数据类型的非值都被认为是相等的,但它们和undefined都不相等。
    例如:0 == false //true;
    "" == 0//true;
    "" == false//true,因为它们都是一种数据类型的非值,又存在自动转换。

    false == undefined //false
    0 == undefined //false,因为它们根本不是一类东西

    但是这个null,作为一种数据类型(对象类型)的非值又有一点特殊,可能是由于它不是基本类型所以不存在自动转换的缘故,它和0,"",false这些都是不==的。它反而和undefined==,据犀牛书介绍,这两者都表示一种空值,null表示的是一种意料之中的空值,而undefined表示更深层次的,意料之外的空值。
    如果用图来表示这些东西的关系,那么"",0,false在一个圈圈里,undefined在另外一个圈圈里,而null则在两个圈圈的交叉部分。

    最后,所有上面提到的东西都有一个共同点,即前面加上一个"!"都会返回true。

  • 相关阅读:
    大话领域驱动
    c#之循环效率
    编程思想之——"人是活的,程序是死的"
    C#之系统异常处理机制
    EF操作扩展之async
    C#提供APP接口之JSON差异
    EF操作MySql
    WCF 消息压缩性能问题及解决方法
    [NoSQL]-Elasticsearch 7.9
    [Linux]-Debian10基础使用
  • 原文地址:https://www.cnblogs.com/cyniczzz/p/5578684.html
Copyright © 2011-2022 走看看