JavaScript中null与undefined有什么区别?

189 阅读2分钟

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第16天,点击查看活动详情

简介:

  • null是一个表示“无”的对象,转为数值时为0。
  • undefined是一个表示“无”的原始值,转为数值时是NaN,当声明变量还未初始化时,变量的默认值为undefined。

定义:

  • undefined:是所有没有赋值变量的默认值,自动赋值。
  • null:主动释放一个变量引用的对象,表示一个变量不再指向任何对象地址,null使用操作符typeof会返回object,因为null是一个空的对象引用。

用法:

undefined:

  • undefined表示 缺少值,就是此处应该有一个值,但是还没有定义,典型用法是:
    1. 变量被声明了,但是没有赋值,就等于undefined。
    2. 调用函数时,应该提供的参数没有提供,该参数就等于undefined。
    3. 对象没有赋值的属性,该属性的值为undefined。
    4. 函数没有返回值时,默认返回undefined。

null:

  • null用来表示尚未存在的对象,常用来表示函数企图返回一个不存在的对象。表示没有对象,即该处不应该有值,典型的用法是:
    1. 作为函数的参数,表示该函数的参数不是对象。
    2. 作为对象原型链的终点。
    3. 当使用完一个比较大的对象时,需要对其进行释放内存时,设置为null。

异同点:

  • 共同点:都是原始类型,保存在栈中变量本地。
  • 不同点:
    • undefined:表示变量声明过但并未赋值,他是所有未赋值变量的默认值。
    • null:表示一个变量将来可能指向一个对象,一般 用于主动释放指向对象的引用。

延伸:垃圾回收站

它是一个专门释放对象内存的一个程序。

  1. 在底层,后台伴随当前程序同时进行,引擎会定时自动调用垃圾回收机制。
  2. 总有一个对象不再被任何变量引用时,才释放。

示例代码:

typeof undefined //undefined
typeof NULL //undefined
typeof null //object
typeof function(){} //function
typeof class{} //object