【前端工程师手册】null和undefined到底是什么关系?

简介: 【前端工程师手册】null和undefined到底是什么关系?

它们是什么


undefined


undefined代表了一个并不存在的值,很多情况都会产生undefined,比如:

  1. 没有返回语句的函数运行结束,就会返回undefined
  2. 访问数组中不存在的下标和对象不存在的属性
  3. void运算符会返回undefined

undefined是一个全局定义的变量:

undefined in window  // true
复制代码


null


空引用或者空对象,下面这些情况都会用到null:

  1. 试图获取一个不存在的元素返回一个null值
  2. 通过分配null可以手动的释放对象,便于垃圾回收


它们哪儿相同


undefined和null都不能被设置属性或者取属性


undefined.name  // Uncaught TypeError: Cannot read property 'name' of undefined
null.name   // Uncaught TypeError: Cannot read property 'name' of null
复制代码


在条件上下文中,都会被计算成false


if(!undefined){
    console.log('show undefined');
}
if(!null) {
    console.log('show null')
}
// show undefined
// show null
复制代码


它们哪儿不同


它们是两个不同的类型


我们都知道JavaScript里面基本类型有:string,number,boolean,null,undefined,所以null和undefined是两个完全不同的类型

Object.prototype.toString.call(null)    // [object Null]
Object.prototype.toString.call(undefined)   //  [object Undefined]
复制代码


typeof操作返回值不同


先看现象:

typeof undefined    // undefined
typeof null     // object
复制代码

其实typeof null返回object是一个遗存的bug,因为第一个版本JavaScript值存在32位的bit中,1-3位是类型标识,而且前三位为000的是object,恰好null表示机器码空指针,在大多数平台上为0x00,所以typeof null就会被误以为是object,而且这个bug到现在也没fix,据说是因为历史代码太多所以被委员会拒绝。


参考资料

typeof-null

探索JavaScript中Null和Undefined的深渊



相关文章
|
30天前
|
JavaScript
JS中Null和Undefined的区别及用法
JS中Null和Undefined的区别及用法
18 1
|
30天前
|
JavaScript 前端开发 算法
undefined与null的区别
在JavaScript中,undefined和null都表示变量未被赋值或值缺失,但它们在使用场景上有一些区别。 - **`语义不同`**:undefined表示一个变量未被赋值或者声明后未进行初始化。而null表示一个变量被明确地设置为无值或者表示空值的概念。 - **`类型不同`**:undefined是一种基本数据类型,而null是一个引用类型。 - **`条件判断`**:在条件判断中,使用if (variable === undefined)或者if (variable === null)可以进行区分。
|
30天前
|
JavaScript 前端开发 程序员
分享18个用于处理 null、NaN 和undefined 的 JS 代码片段
Null、NaN 和 undefined 是程序员在使用 JavaScript 时遇到的常见值。 有效处理这些值对于确保代码的稳定性和可靠性至关重要。
|
30天前
|
JavaScript 前端开发 API
null和undefined:两个JavaScript中的特殊值(二)
null和undefined:两个JavaScript中的特殊值
|
30天前
|
JavaScript 前端开发 安全
null和undefined:两个JavaScript中的特殊值(一)
null和undefined:两个JavaScript中的特殊值
|
30天前
|
资源调度 前端开发
编译第三方前端项目时候出现Syntax Error: TypeError: Cannot set properties of undefined (setting ‘parent‘)
编译第三方前端项目时候出现Syntax Error: TypeError: Cannot set properties of undefined (setting ‘parent‘)
74 0
null、undefined和未声明变量的具体应用场景
null、undefined和未声明变量的具体应用场景
|
30天前
|
前端开发 JavaScript 搜索推荐
前端网页手册(2)--菜鸟教程网站分析
前端网页手册(2)--菜鸟教程网站分析
20 2
|
30天前
|
前端开发 JavaScript 关系型数据库
前端网页手册(1)--基础学习
前端网页手册(1)--基础学习
11 1
|
30天前
|
前端开发 JavaScript
【Web 前端】undefined 和 null 区别?
【4月更文挑战第22天】【Web 前端】undefined 和 null 区别?
【Web 前端】undefined 和 null 区别?