logo头像

求知若渴,虚心若愚

JavaScript - 数据类型 - null 和 undefined

Null

  • null就是表示没有东西
  • Null类型是只有一个值的数据类型,这个特殊的值是null
  • null值表示一个指向不存在或无效的对象或地址
  • null用来表示尚未存在的对象,常用来表示函数企图返回一个不存在的对象

typeof null

  • typeof null 返回object
  • 这是JavaScript的设计错误,它应该被示为null类型,而不是object类型,或者非对象类型
  • null 本身是基本类型,也有人说null是一种特殊的object

场景

  • Object.prototype._proto_的值也是null
  • 在JS的DOM元素获取中,如果没有获取到指定的元素对象,结果一般是null
  • 否定null值返回true,但将其与false(或true)进行比较则会给出false
  • 在基础数学运算中,null值将被转换为0
  • 在正则捕获的时候,如果没有捕获到结果,默认也是null
1
2
3
4
5
console.log(typeof null) // objetc
console.log(document.getElementById('1')) // null
console.log(!null) // true
console.log( null == true) // false
console.log( null == false) // false

undefined

  • 它也是JavaScript的原始数据类型
  • undefined是全局作用域的一个变量
  • undefined的最初值就是原始数据类型undefined

出现场景

  • 在变量提升(预解析)阶段
  • 变量声明但没有初始化时,只声明未定义
  • 要查询的对象属性或数组的元素不存在时
  • 如果函数没有任何返回值,则返回undefined
  • 引用没有提供实参的函数形参的值也只会得到undefined
  • 在JS的严格模式下(”use strict”),没有明确的主体,this指的就是undefined
  • 否定undefined值返回true,但将其与false(或true)进行比较则会给出false
1
2
3
4
5
6
7
8
9
10
11
12
var a ;
console.log(a) // undefined

var b = {}
console.log(b.name) // undefined

var arr = ['hello','xiaofengge']
console.log(arr[3]) // undefined
console.log(typeof undefined) // undefined
console.log(!undefined) // true
console.log( undefined == true) // false
console.log( undefined == false) // false

null vs undefined

相同点

  • 它们都是“假值”,当被否定时,两者的值都是true,也就是取反都是true
  • 它们两个都不包含任何属性和方法
  • 都只有一个值:
    • Undefined类型只有一个值,即undefined
    • Null类型也只有一个值,即null
  • 都是原始类型的值,保存在栈中变量本地
  • 在根据需要转换成对象时两者都会报异常,即throws TypeError

不同点

  • null是JavaScript语言的关键字,而undefined是JavaScript预定义的全局变量,不是关键字

  • 类型不一样

    • typeOf undefined => undefined
    • typeOf null => object
  • 转化为值时不一样:
    • undefined为NaN
    • null为0
  • 转化为字符串:
    • undefined在根据需要自行转换为字符串是转换为”undefined”
    • null转换为”null”
  • undefined有自己的数据类型(undefined),null只是一个对象
1
2
3
4
5
6
7
8
9
10
11
12
// 类型
console.log(typeof null) // object
console.log(typeof undefined) // undefined

// 转化为数值
console.log(Number(null)) // 0
console.log(Number(undefined)) // NaN

// 会执行类型转换
console.log(undefined == null) // true
// 首先计算其操作数的值,然后比较这两个值,比较过程没有任何类型转换
console.log(undefined === null) // false

TIP

  • undefined是表示系统级的、出乎意料的或类似错误的值的空缺
  • 而null是表示程序级的、正常的或在意料之中的值的空缺。
  • 如果想把它们赋值给变量或属性或者当做参数传入函数,最好选择使用null。
支付宝打赏 微信打赏

赞赏是对我们的肯定!