为什么javascript会有两个表示“没有”的类型呢?

Js中有两个表示“没有”这一概念的基本类型分别是null和undefined,那么他们有什么区别呢?

一、历史原因:null是对象,自动转化成0. undefined是原始值,自动转化成NaN。

在js语言初期阶段,js是效仿的java语言,在java中null也是一个对象,只不过这个对象表示的是空对象,换句话说,如果一个变量赋值为null,那么这个变量的指针不指向任何对象。这也说明为什么在js中用typeof检测null类型为“object”。同时还集成了java一个特点是null可以自动转化为0.

Js语言创造者发现,null表示空并不是很好,因为他毕竟是一个对象。同时,js语法中变量分为了原始类型和对象类型,所以要找到一个更好的方式来表示“空”这个概念。还有一个理由就是java中有错误处理机制,对于null自动转化成0的错误可以发现,但早期的js没有错误处理。

从而引入了undefined,undefined是一个原始值,不是对象,并且自动转化成NaN可以发现异常,用typeof检测undefined结果为“undefined”。

二、目前来看:null表示开发者已经明确确定此处确实没有东西,或者说这个变量没有指向任何的东西,是肯定的意料之中的。Undefined是指缺省值,此处肯定要有一个值,只不过你没有告诉我这个值是啥。

这里写图片描述

在一个幼儿园,老师要根据名单给孩子分礼物,1号孩子得到三个礼物,2号孩子在名单上表明没有礼物即0个礼物,3号孩子在名单上也没有说明他到底获得几个礼物,4号孩子获得一个礼物。
开始分发礼物,1号孩子获得了一个盒子里面放着三个星星,4号孩子获得了一个盒子里面放着一个星星,但是问题来了到底给不给2号孩子东西,如果不给,那么他将和3号孩子区分不出来,所以决定给他一个空盒子确定2号孩子没有星星,所以由于3号孩子不知的几个星星可能是0个或者更多,所以决定什么也不给他。
这里的2号孩子相当于一个变量,获得空箱子相当于赋予一个null,只不过这个变量不指向任何东西,3号孩子什么也没有获得,但是以后可能会获得到很多的星星或者确定确实没有星星,至少现在我还不知道。相当于有这么一个变量,但是以后可能或得到值,所以现在还不能决定他。

三、用法

Null:肯定变量不能有值
(1)作为函数的参数,表示该函数的参数不是对象或者明确不能有值。
(2) 作为对象原型链的终点。
Undefined:该变量肯定要有一个值,但是不知道是什么。
(1)变量被声明了,但没有赋值时,就等于undefined。
(2)调用函数时,应该提供的参数没有提供,该参数等于undefined。
(3)对象没有赋值的属性或属性不存在,该属性的值为undefined。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值