【基础】JavaScript 中 null 和 undefined 的区别?

JavaScript代码编程中存在这样两种表示“无”的原始类型:null与undefined。这两种类型常常会使JavaScript的开发人员产生疑惑,在什么时候是null,什么时候又是undefined?

我们先比较下这两个:

console.log(null==undefined)    // true
console.log(null===undefined)   // false

通过运行代码可以看出null和undefined是相等的,但是当他们做全等比较时,又不等。原因是什么呢?我们再来看下他们的类型:

console.log(typeof null)        // object
console.log(typeof undefined)   // undefined

null是object类型,代表一个“空值”,一个空对象指针,undefined是undefined类型,当一个声明了一个变量未初始化时,得到的就是undefined。

为什么大多数语言只有一个表示无的值,而JavaScript有两个,这里我们引用阮一峰老师的文章片段:

最近,我在读新书《Speaking JavaScript》时,意外发现了这个问题的答案!
原来,这与JavaScript的历史有关。1995年JavaScript诞生时,最初像Java一样,只设置了null作为表示"无"的值。
根据C语言的传统,null被设计成可以自动转为0。

Number(null)    // 0
5 + null        // 5

但是,JavaScript的设计者Brendan Eich,觉得这样做还不够,有两个原因。
首先,null像在Java里一样,被当成一个对象。但是,JavaScript的数据类型分成原始类型(primitive)和合成类型(complex)两大类,Brendan Eich觉得表示"无"的值最好不是对象。
其次,JavaScript的最初版本没有包括错误处理机制,发生数据类型不匹配时,往往是自动转换类型或者默默地失败。Brendan Eich觉得,如果null自动转为0,很不容易发现错误。
因此,Brendan Eich又设计了一个undefined。

上面说了设计这两个的原因,其实基本上是一样的,只是有细微差别,那到底什么时候用null,什么时候用undefined呢?

1 null:表示"没有对象",即该处不应该有值

  • 作为函数的参数,表示该函数的参数不是对象。

  • 作为对象原型链的终点。

2 undefined:表示"缺少值",就是此处应该有一个值,但是还没有定义

  • 变量被声明了,但没有赋值时,就等于undefined。

  • 调用函数时,应该提供的参数没有提供,该参数等于undefined。

  • 对象没有赋值的属性,该属性的值为undefined。

  • 函数没有返回值时,默认返回undefined。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值