# null和undefined

  • null是一个表示无的对象,转为数值时为 0
  • undefined是一个表示无的原始值,转为数值时为NaN

DANGER

目前null和undefined基本是同义的,都是原始类型,且只有一些细微的差别

# undefined

Undefined类型只有一个值,就是undefined。当声明的变量未初始化时,该变量的默认值是undefined。所以一般地,undefined表示变量没有初始化

var a;      //undefined
console.log(a == undefined);  //true

【出现场景】

# 【1】已声明未赋值的变量

var i;
console.log(i); // undefined

# 【2】获取对象不存在的属性

var o = {};
console.log(o.p); // undefined

# 【3】无返回值的函数的执行结果

function f(){};
console.log(f()); // undefined

# 【4】函数的参数没有传入

function f(x){return x;}
console.log(f()); // undefined

# 【5】void(expression)

console.log(void(0)); // undefined

# undefined类型转换

Boolean(undefined):  false
Number(undefined):   NaN
String(undefined):  'undefined'  

# undefined类型鉴别

鉴别undefined类型,使用typeof运算符即

console.log(typeof undefined);   // 'undefined'
console.log(typeof 'undefined'); // 'string'

TIP

**[注意]**由于undefined并不是一个关键字,其在IE8-浏览器中会被重写,在高版本函数作用域中也会被重写;所以可以用void 0 来替换undefined

var undefined = 10;
console.log(undefined); // IE8-浏览器下为10,高版本浏览器下为undefined
function t(){
    var undefined = 10;
    console.log(undefined);
}
console.log(t());//所有浏览器下都是10

# null

Null类型只有一个值,就是nullnull是javascript语言的关键字,它表示一个特殊值,常用来描述 空值

TIP

什么时候给变量赋值为null?

  • 初始赋值,表明要赋值为对象
  • 结束前,让对象成为垃圾对象(被垃圾回收器回收)

逻辑角度看,null值表示一个空对象指针

console.log(document.getElementById('jc')); // null

DANGER

[注意] null 是空对象指针,而 [] 是空数组,{} 是空对象,三者不相同

console.log(typeof null);//'object'

不同的对象在底层都表示为二进制,在javascript中二进制前三位都为0会被判断为object类型,null的二进制表示是全0,所以执行typeof时返回'object'

尽管null和undefined是不同的,但它们都表示"值的空缺",null表示"空值",undefined表示"未定义"。两者往往可以互换。判断相等运算符==认为两者是相等的

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

TIP

实际上,因为undefined和null不是构造器类型,所以它们没有任何的属性和方法,使用.和[]来存取这两个值的成员或方法都会产生一个类型错误

# null类型转换

Boolean(null):   false
Number(null):    0
String(null):    'null'

# 类型鉴别

TIP

鉴别null类型,使用typeof运算符不可行,因为该运算符会返回'object',null被认为是空对象指针

判断一个值是否为null类型的最佳方法是直接和null进行恒等比较

console.log(typeof null);//'object'
console.log(null === null);//true
console.log(undefined === null);//false
console.log('null' === null);//false
Last Updated: 2/19/2022, 8:02:14 PM