Null 与 Undefined数据类型

前面的话

javascript的设计者Brendan Eich,设计了两种数据类型都表示“无”的意思,虽然两者含义相同,但两者还是有细微差别。

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

Undefined类型

Undefined类型只有一个值,即Undefined。

什么情况是undefined?

在使用var声明变量时,但未对其加以初始化时,这个变量值为undefined。

例如:

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

不过,包含undefined值的变量与尚未定义的变量还是不一样的。

    var msg ;
    console.log(msg);// undefined
    console.log(a);// 产生错误

对于尚未声明的变量,只能执行一项操作,即使用typeof操作符检测其数据类型(并且严格模式下还会报错)

// test 未声明  
   console.log(typeof test);// undefined

[出现场景]

  • 已声明未赋值的变量
  • 获取对象不存在的属性
  • 空函数体的函数执行结果
  • 函数的参数没有传入
  • void(表达式)
var a ;
console.log(a);// undefined

var object = {};
console.log(object.a) // undefined

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

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

console.log(void(1+4));// undefined

[类型转换]

   console.log( Boolean(undefined));// false
   console.log( Number(undefined)); // NaN
   console.log( String(undefined));// "undefined"

[类型鉴别]

鉴别undefined的类型,使用typeof操作符即可

console.log(typeof undefined)// 'undefined'
Null类型

Null 类型的数据类型也只有一个值,这个特殊值为null。

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

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

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

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

为什么null的类型是object?

因为在 JS 的最初版本中,使用的是 32 位系统,为了性能考虑使用低位存储了变量的类型信息,000 开头代表是对象,然而 null 表示为全零,所以将它错误的判断为 object 。虽然现在的内部类型判断代码已经改变了,但是对于这个 Bug 却是一直流传下来。

尽管null的undefined是不同的,但是它们都表示"值的空缺",null表示“空值”,undefined表示“未初始化”。两者可以互换。运算符“==”认为两者相等

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

[类型转换]

console.log(Boolean(null));// false
console.log(Number(null))// 0
console.log(String(null))// 'null' 

[类型鉴别]

鉴别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
总结
  • 无论在什么情况下,都没有必要把一个变量的值显示的设置为undefined,对null不适用。
  • 如果定义的变量准备将来用来存放保存对象,那么最好将该变量初始化为null,而不是其他值。这样体现了null作为空对象指针的惯例。

参考:

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值