Javascript中null和undefined的区别

1731 4 年前
在JavaScript中存在这样两种原始类型:null与undefined。这两种类型常常会使JavaScript的开发人员产生疑惑,在什么时候是null,什么时候又是undefined?

Undefined类型

  • 表示变量不含有值
  • Undefined 类型只有一个值,即特殊的 undefined

声明未初始化的变量会自动被赋予 undefined 值与未定义的变量有点本质的区别

var message; // 声明之后默认为undefined 值
// 下面这个变量并没有声明
// var age
alert(message); // "undefined"
alert(age); // 产生错误

对未初始化的变量执行 typeof 操作符会返回 undefined 值,ES5中对未声明的变量执行 typeof 操作符同样也会返回 undefined 值,但 ES6 里 letconst没有变量声明提升同时在声明之前有暂时性死区 所以如果在声明之前对一个变量使用 typeof 会报错。

var message; // 声明之后默认取得了 undefined 值
// 下面这个变量并没有声明
// var age
alert(typeof message); // "undefined"
alert(typeof age); // "undefined"

undefined 一般出现在以下几种情况:

  1. 在使用 var 声明变量但未对其加以初始化时,这个变量的值就是 undefined
  2. 获取不存在的属性名返回 undefined
  3. 在严格模式下,没有明确的执行主体,thisundefined
  4. 执行函数形参未传值,默认是 undefined
  5. 函数没有返回值(return或者return后面什么也不带),默认返回 undefined
  6. 在数组的 find 方法中,没有找到的情况下是 undefined

null类型

表示空对象指针,空,没有 Null 类型是第二个只有一个值的数据类型(第一个就是Undefined),这个特殊的值是 null

var car = null;
alert(typeof car); // "object"

如果定义的变量准备在后面保存对象,那么最好将该变量初始化为 null 而不是其他值。

null 一般出现在以下几种情况:

  1. 手动设置变量的值或者对象某一个属性值为null(此时不赋值,会在后面的代码中进行赋值,相当于初始化。)
  2. 在JS的 DOM 元素获取中,如果没有获取到指定的元素对象,结果一般是 null
  3. Object.prototype._proto_的值也是null。
  4. 在正则捕获的时候,如果没有捕获到结果,默认也是 null

nullundefined 之间的相等操作符(==)总是返回 true

© 2018邮箱:11407215#qq.comGitHub沪ICP备12039518号-6