理一理JS中undefined和null与false、0、{}、[]之间的关系

首先我们知道JS的数据类型分为基本类型(包含Null、Undefined、String、Boolean、Number)和引用类型Object
需要注意的是:
a.类型都是大写开头,相当于其他语言的类
b.typeof操作符返回的是代表类型的字符串,这里经常会有人搞混,比如typeof 10,返回的是“number”这个字符串,返回的不是数据类型,而是代表数据类型的字符串;
另外,typeof一个数组、一个对象或者null返回的都是“object”
c.那么我们如何去区分到底是数组还是对象呢?根据继承关系,Array继承自Object,那么我们使用instanceof关键词用来检测是不是某个类的实例,那么某个数组肯定是Object的实例,但是某个对象却不是数组的实例,如下图的关系
理一理JS中undefined和null与false、0、{}、[]之间的关系
d.关于=,==比较两边隐式转化后可比较的值,但不考虑数据类型,=除了比较值是否相等之外,还考虑了数据类型,如果数据类型不一样,那=无法成立

有了以上的知识,那么我们开始讨论这标题中几者之间的关系(我们这里不讨论全等的情况,因为全等情况比较容易理解)
1.undefined
如果变量已经声明,但是没有赋值,则此变量返回undefined;
undefined属于Undefined类型;
typeof undefined 返回“undefined”这一字符串;
undefined和其他几个值有如下关系
理一理JS中undefined和null与false、0、{}、[]之间的关系

2.null
null即为不存在东西,也是一个对象的空指针状态;
null原则上属于Null类型,其实整个Null类型就只有一个成员null;
但是我们用typeof来检测null时候,却返回了“object”,不知道是不是语言设计上的失误
它和其他值的关系
理一理JS中undefined和null与false、0、{}、[]之间的关系
那么我们现在可以总结一下null和undefined,除了他们两者相等(==)外,其他比较均不成立,这可能就是所谓的我们长得不一样,却是穿同一条裤子的?