【前端工程师手册】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的深渊



相关文章
|
资源调度 前端开发
编译第三方前端项目时候出现Syntax Error: TypeError: Cannot set properties of undefined (setting ‘parent‘)
编译第三方前端项目时候出现Syntax Error: TypeError: Cannot set properties of undefined (setting ‘parent‘)
880 0
|
机器学习/深度学习 JavaScript 前端开发
JavaScript typeof, null, 和 undefined
JavaScript typeof, null, 和 undefined
142 5
|
存储 JavaScript 前端开发
|
JavaScript 前端开发 开发者
JavaScript数据类型概述及Undefined与Null详解
JavaScript数据类型概述及Undefined与Null详解
168 3
|
前端开发 JavaScript 开发者
JavaScript中的哲学难题:深入探讨undefined与null的情感纠葛
【8月更文挑战第23天】在Web前端开发中,理解和区分`undefined`与`null`至关重要。`undefined`表示变量已声明但未赋值,常出现在未初始化的变量或函数无返回值的情形;`null`则是开发者主动赋值的结果,意味着变量虽存在但值为空。虽然`undefined == null`为真,但`undefined === null`为假,表明它们在语义上有明显差异。合理使用两者能增强代码的健壮性和可读性,避免运行时错误。
209 0
|
JavaScript 前端开发 数据库
编程小白到高手:掌握null与undefined、JavaScript中隐藏的技巧曝光!
编程小白到高手:掌握null与undefined、JavaScript中隐藏的技巧曝光!
|
JavaScript 前端开发 索引
JavaScript有7个数据类型:Number, String, Boolean, Null, Undefined, Symbol(BES6)和BigInt(ES10)组成基本类型
【6月更文挑战第25天】JavaScript有7个数据类型:Number, String, Boolean, Null, Undefined, Symbol(BES6)和BigInt(ES10)组成基本类型,而Object包括Array、Function等是引用类型。Objects可以包含键值对,Array是特殊的Object。Functions也是对象。`null`和`undefined`被视为特殊的原始值。
212 1
null、undefined和未声明变量的具体应用场景
null、undefined和未声明变量的具体应用场景
|
前端开发 JavaScript 搜索推荐
前端网页手册(2)--菜鸟教程网站分析
前端网页手册(2)--菜鸟教程网站分析
162 2
|
前端开发 JavaScript 关系型数据库
前端网页手册(1)--基础学习
前端网页手册(1)--基础学习
105 1

热门文章

最新文章

  • 1
    前端工程化演进之路:从手工作坊到AI驱动的智能化开发
  • 2
    Vue 3 + TypeScript 现代前端开发最佳实践(2025版指南)
  • 3
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(六):全方面分析css的Flex布局,从纵、横两个坐标开始进行居中、两端等元素分布模式;刨析元素间隔、排序模式等
  • 4
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(五):背景属性;float浮动和position定位;详细分析相对、绝对、固定三种定位方式;使用浮动并清除浮动副作用
  • 5
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(八):学习transition过渡属性;本文学习property模拟、duration过渡时间指定、delay时间延迟 等多个参数
  • 6
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(一):CSS发展史;CSS样式表的引入;CSS选择器使用,附带案例介绍
  • 7
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(四):元素盒子模型;详细分析边框属性、盒子外边距
  • 8
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(二):CSS伪类:UI伪类、结构化伪类;通过伪类获得子元素的第n个元素;创建一个伪元素展示在页面中;获得最后一个元素;处理聚焦元素的样式
  • 9
    前端如何存储数据:Cookie、LocalStorage 与 SessionStorage 全面解析
  • 10
    前端如何禁止用户打开 F12 开发者工具