undefined:

undefined是全局对象的一个属性,在一下情况下都是undefined:

当一个变量没有被赋值;

当一个函数没有返回值;

当某个对象不存在某个属性却去访问;

当函数定义了形参但没有传递实参;

typeof undefined  判断类型是 'undefined'; undefined == undefined; undefined === undefined;undefined == null;

null:

null代表对象的值未设置,相当于一个对象没有设置指针地址就是null;

typeof null  判断类型是 'object'; null == null;null === null;null == undefined;null !== undefined;

null其实是属于自己的NULL类型,并非‘object’类型,之所以typeof判定为’object‘,是JavaScript数据类型在底层都是以二进制的形式存储的;

二进制的前三位为0 会被typeof判定为’object‘对象类型,而null的二进制位恰好都为0,因此,typeof null 为‘object’

undefined表示一个变量初始状态值,而null则表示一个变量被人为设置为空对象,而不是原始状态;

在实际使用中,无需对一个变量显示的赋值undefined,当需要释放一个对象时或让一个变量为null时,直接赋值为null即可;

对象被赋值为null以后,对象对应的堆内存中的值就是游离状态了,GC会择机回收该值并释放内存。

因此,需要释放某个对象,就将变量设置为null,即表示该对象已经被清空,目前无效状态

?. 可链选操作符 和 ??空值合并操作符(ES11)

?.可链选操作符允许读取链接对象深处的属性值,不必明确验证链中的每个引用是否有效

?.可链选操作符类似 . ,不同之处在于,引用为空的情况下不会引起报错

null?.name   //undefined
null.name //报错 undefined?.name //undefined
undefined.name //报错 const person = {
name:'cc',
prop:{
age:18
}
}
person?.name?.height?.age?.gender //undefined let arr = [1,2,[3,4]]
arr?.[1] //2
arr?.[2]?.[1] //3
arr?.[10] //undefined

??是一个逻辑操作符,只有在左侧的值为null或者undefined 时,才会返回右侧的值,否则返回左侧的值

|| 短路操作符,只在左侧值为false时,返回右侧值

console.log(null ?? 'default')     //default
console.log(undefined ?? 'default') //default
console.log(0 ?? 'default') //0
console.log('' ?? 'default') // '' console.log(null || 'default') //default
console.log(undefined || 'default') //default
console.log(0 || 'default') //default
console.log('' || 'default') // default

|| 与 &&

console.log( 5 && 4 );//当结果为真时,返回第二个为真的值4
console.log( 0 && 4 );//当结果为假时,返回第一个为假的值0
console.log( 5 || 4 );//当结果为真时,返回第一个为真的值5
console.log( 0 || 0 );//当结果为假时,返回第二个为假的值0

参考:

https://www.nowcoder.com/exam/interview/detail?

questionClassifyId=0&questionId=2412346&questionJobId=156&type=1

https://blog.csdn.net/summer_girlcc/article/details/120906121

undefined与null与?. ??的更多相关文章

  1. JavaScript中undefined与null的区别

    通常情况下, 当我们试图访问某个不存在的或者没有赋值的变量时,就会得到一个undefined值.Javascript会自动将声明是没有进行初始化的变量设为undifined. 如果一个变量根本不存在会 ...

  2. 对于undefined和null,还有处理这一类的数组

    var total=0; var data=new Array(5);//定义了data数组,length为5,但是都是元素都是undefined. for(i=0;i<data.length; ...

  3. javascript类型系统——undefined和null

    × 目录 [1]原因 [2]undefined [3]null 前面的话 一般的程序语言,表示空的只有null,但javascript的设计者Brendan Eich却设计了一个undefined,这 ...

  4. SharePoint 2013 Error - TypeError: Unable to get property 'replace' of undefined or null reference

    错误信息 TypeError: Unable to get property ‘replace’ of undefined or null referenceTypeError: Unable to ...

  5. JS 中如何判断 undefined 和 null

    JS 中如何判断 undefined JavaScript 中有两个特殊数据类型:undefined 和 null,下节介绍了 null 的判断,下面谈谈 undefined 的判断. 以下是不正确的 ...

  6. 【温故而知新-Javascript】比较 undefined 和 null 值

    JavaScript 中有两个特数值: undefined和null,在比较它们的时候需要留心.在读取未赋值的变量或试图读取对象没有的属性时得到的就是 undefined 值. <!DOCTYP ...

  7. undefined与null的区别

    最近在默默的看面试题,其中有一个题目就是“undefined和null的区别”,突然意识到自己从未关注过这个问题,心中莫名有种急躁的感觉,百度一下发现阮大神的一篇文章(http://www.ruany ...

  8. 【JS Note】undefined与null

    在Javascript中有这两种原始类型: Undefined与Null.而这两种原始类型都各自只有一个值,分别是undefined,null. undefined: 1.变量声明后未赋值,则变量会被 ...

  9. 【转】JavaScript中undefined与null的区别

    通常情况下, 当我们试图访问某个不存在的或者没有赋值的变量时,就会得到一个undefined值.Javascript会自动将声明是没有进行初始化的变量设为undifined. 如果一个变量根本不存在会 ...

  10. Javascript数据类型——undefined和null的异同

    Javascript的基本数据类型中有undefined和null两种只有一个值得特殊数据类型.其中undefined表示未被初始化,不是为声明.而null表示一个空对象指针,而这也是使用typeof ...

随机推荐

  1. 5_系统的可控性_Controllability

  2. 三、原理图生成网表并导入PCB放置元件

    1.生成网表 2.成功标志 3.新建PCB文件 4.导入网表至PCB 5.导入网表成功标志 6.创建.psm文件(绘制的封装格式为.dra文件,在PCB里面要以.psm的文件存在)  将丝印做成封装需 ...

  3. 小程序入门系列之 tabBar

    本系列为简单入门系列,以一定概括性思路来叙述内容,具体可以查看官网 大部分的电商应用都是底部或顶部多 tab 的模式. 下面我们从配置角度来分析一下: 第一个:position 配置如下: 默认是 b ...

  4. 前端系列——React开发必不可少的eslint配置

    项目需要安装的插件 "babel-eslint": "^8.0.3", "eslint": "^4.13.1", &qu ...

  5. java如何读取和遍历properties文件

    在java项目开发过程中,使用properties文件作为配置基本上是必不可少的,很多如系统配置信息,文件上传配置信息等等都是以这种方式进行保存.同时学会操作properties文件也是java基础. ...

  6. jq移动端图片预览 (fly-zomm-img.js)

    效果图: ===>==> 里面还与很多属性设置: index  关闭按钮等等 代码: //html-----------------------<div class="he ...

  7. 在 WASI 上运行 .NET 7 应用程序

    WASI代表 WebAssembly 系统接口,WASI 让沙盒化的 WebAssembly 应用程序通过一系列类似 POSIX 的函数访问底层操作系统,允许独立于浏览器运行 WebAssembly ...

  8. redis集群在线迁移第一篇(数据在线迁移至新集群)实战一

    迁移背景:1.原来redis集群在A机房,需要把其迁移到新机房B上来.2.保证现有环境稳定.3.采用在线迁移方式,因为原有redis集群内有大量数据.4.如果是一个全新的redis集群搭建会简单很多. ...

  9. C/C++在Win32控制台播放Bad Apple

    ##前言 这里首先你需要准备一些文件,将一个Bad Apple的视频分别转换成txt和mp3格式(mp3用来作为背景音乐) 我将txt文件放到exe文件目录下的子目录files里了 转换方法可以用Ad ...

  10. CesiumJS 2022^ 原理[2] 渲染架构之三维物体 - 创建并执行指令

    目录 回顾 预备知识:指令 预备知识:通道 1. 生成并执行指令 1.1. Primitive 生成指令 1.2. Context 对象负责执行 WebGL 底层代码 2. 多段视锥体技术 3. 指令 ...