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. Pandas数据统计函数

    Pandas数据统计函数 汇总类统计 唯一去重和按值计数 相关系数和协方差 0.读取csv数据 1.汇总类统计 2.唯一去重和按值计数 2.1 唯一性去重 一般不用于数值列,而是枚举.分类列 2.2 ...

  2. CSS 文本控制

    one more time one more chance. 一歩重头学前端, css入门. 学习一些 CSS 文本控制的属性,防止做傻事.请大家对照下面列表检验下: 会的.不会的.似懂非懂的.笔者是 ...

  3. video标签学习使用

    video标签学习使用 学习前的理解 video是HTML5中的新标签,可以用来播放视频.对于不同的浏览器支持的视频格式不一样,但是具体浏览器支持的类型并不清楚. 支持的类型 视频的格式分为编码格式和 ...

  4. Muse UI遇到的坑

    写在前面:我只是一个前端小白,文章中的提到可能会有不足之处,仅提供一个参考.若有不完善的地方,欢迎各位大佬指出,希望对你有帮助! 故事背景是这样的,最近做一个Vue项目,使用到 Muse UI 组件库 ...

  5. String能变化吗?和StringBuffer的区别是什么

    [新手可忽略不影响继续学习]看 过上面例子的童鞋一定会觉得很奇怪,s = s + s1.charAt(i); 马克-to-win, s不是老在变化吗?其实s = "";时,虚拟机会 ...

  6. java中当static块和构造函数同时出现,顺序是?

    静态块先于构造函数执行 class Student {    int age;    String name;    static int count;    public Student() {   ...

  7. Vue入坑日记: day - 01

    前言 最近做了一些小项目,小组里写前端的确实有点拉胯,于是自己动手写前端,因为大一学过web前端基础,所以对HTML,CSS还有印象,就直接对JS下手了,学了两天把JS大致搞明白了,顺便对JQuery ...

  8. /dev/dm-0 ....(/dev/mapper机制)

    查看/dev下时候,会看到dm-xx的设备,那么这些设备到底是什么设备呢, Device Mapper 是 Linux 2.6 内核中提供的一种从逻辑设备到物理设备的映射框架机制, 在该机制下,用户可 ...

  9. Java学习day42

    继续刷力扣题

  10. windows批处理执行图片爬取脚本

    背景 由于测试时需要上传一些图片,而自己保存的图片很少. 为了让测试数据看起来不那么重复,所以网上找了一个爬虫脚本,以下是源码: 1 import requests 2 import os 3 4 c ...