【Javascript基础】null 和undefined

在开始学习和使用js的时候,对nullundefined的理解上可能存在一定的混淆,总结一下自己的它们的理解.

undefined

undefined用来表示一个变量尚未定义或者变量定义了但是现在并没有初始化数据

var a;
console.log(a);//返回值是"undefined"

这个也容易了解,大家也知道,Javascript是一种弱类型的语言,设想现在你定义了变量,变量里面并没有給任何值,请问你能告诉我这个变量用来保存什么类型的值吗?我想你的回答肯定是:“不知道,因为没有足够的信息去判断”,

同样,Javascript引擎现在也获取不到足够的信息来判断当前的变量是什么类型的,所有它只能告诉你的是:undefined(“俺也不知道”).

null

null其实是一种赋值,用来表示尚未存在的对象,常用来表示函数企图返回一个不存在的对象, 它如果赋值给某个变量,用来表示当前变量属于一种没有值的状态,从一定角度上可以理解为占位.例如:

alert(null == document.getElementById('notExistElement'));  

当页面上不存在id为”notExistElement”的DOM节点时,这段代码显示为”true”,因为我们尝试获取一个不存在的对象。

再看下面一段代码:

typeof undefined;//结果是:undefined
typeof null; //结果是: object

从上面的例子中我们可以得知,nullundefined其实是两种不同类型的值,undefined的类型是它本身,而null的类型是Object.,为什么null的类型是Object了呢?其实这是JavaScript最初实现的一个错误,后来被ECMAScript沿用下来。

下面这几个判断,经常遇到:

 null === undefined // false
 null == undefined // true
 null === null // true
 null = 'value' // ReferenceError
 undefined = 'value' // 'value'

如何区分呢?

其实两者从效果上基本上都是一样,区别主要在于强调的点不同,undefined强调的是变量并没有初始化,而null强调是将当前的变量设置为没有值的状态.

JavaScript的最初版本是这样区分的:null是一个表示”无”的对象,转为数值时为0;undefined是一个表示”无”的原始值,转为数值时为NaN。

+ null ;//结果会是:0
+ undefined;//结果会是: NaN

参考:
1. 阮一峰: undefined与null的区别
2. Stackoverflow: What is the difference between null and undefined in JavaScript?
3. JS中Null与Undefined的区别

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值