undefined与null与?. ??
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与?. ??的更多相关文章
- JavaScript中undefined与null的区别
通常情况下, 当我们试图访问某个不存在的或者没有赋值的变量时,就会得到一个undefined值.Javascript会自动将声明是没有进行初始化的变量设为undifined. 如果一个变量根本不存在会 ...
- 对于undefined和null,还有处理这一类的数组
var total=0; var data=new Array(5);//定义了data数组,length为5,但是都是元素都是undefined. for(i=0;i<data.length; ...
- javascript类型系统——undefined和null
× 目录 [1]原因 [2]undefined [3]null 前面的话 一般的程序语言,表示空的只有null,但javascript的设计者Brendan Eich却设计了一个undefined,这 ...
- 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 ...
- JS 中如何判断 undefined 和 null
JS 中如何判断 undefined JavaScript 中有两个特殊数据类型:undefined 和 null,下节介绍了 null 的判断,下面谈谈 undefined 的判断. 以下是不正确的 ...
- 【温故而知新-Javascript】比较 undefined 和 null 值
JavaScript 中有两个特数值: undefined和null,在比较它们的时候需要留心.在读取未赋值的变量或试图读取对象没有的属性时得到的就是 undefined 值. <!DOCTYP ...
- undefined与null的区别
最近在默默的看面试题,其中有一个题目就是“undefined和null的区别”,突然意识到自己从未关注过这个问题,心中莫名有种急躁的感觉,百度一下发现阮大神的一篇文章(http://www.ruany ...
- 【JS Note】undefined与null
在Javascript中有这两种原始类型: Undefined与Null.而这两种原始类型都各自只有一个值,分别是undefined,null. undefined: 1.变量声明后未赋值,则变量会被 ...
- 【转】JavaScript中undefined与null的区别
通常情况下, 当我们试图访问某个不存在的或者没有赋值的变量时,就会得到一个undefined值.Javascript会自动将声明是没有进行初始化的变量设为undifined. 如果一个变量根本不存在会 ...
- Javascript数据类型——undefined和null的异同
Javascript的基本数据类型中有undefined和null两种只有一个值得特殊数据类型.其中undefined表示未被初始化,不是为声明.而null表示一个空对象指针,而这也是使用typeof ...
随机推荐
- css3 弹性布局和多列布局
弹性盒子基础 弹性盒子(Flexible Box)是css3中盒子模型的弹性布局,在传统的布局方式上增加了很多灵活性. 定义一个弹性盒子 在父盒子上定义display属性: #box{ display ...
- 聊一聊Web端的即时通讯
聊一聊Web端的即时通讯 Web端实现即时通讯的方法有哪些? - 短轮询 长轮询 iframe流 Flash Socket 轮询 客户端定时向服务器发送Ajax请求,服务器接到请求后马上返回响应信息并 ...
- JavaFX入门及相关问题
下个星期是我们专业的课程设计专周,主要是做一个Java的桌面应用程序,老师上课讲的是用Swing来开发图形化界面,但是听朋友说到一个可视化的图形界面工具JavaFX,本 人愚笨,弄了一天才大致调试完成 ...
- 根据官方文档使用Visual Studio Code创建代码组件的一些总结
1.安装组件Visual Studio Code Download Visual Studio Code - Mac, Linux, Windows 2.安装Node.js Download | No ...
- java的collection类
collection来源于java.util包. Collection 接口常用的方法 size():返回集合中元素的个数 add(Object obj):向集合中添加一个元素 addAll(Coll ...
- java基础知识-序列化/反序列化-gson基础知识
以下内容来之官网翻译,地址 1.Gson依赖 1.1.Gradle/Android dependencies { implementation 'com.google.code.gson:gson:2 ...
- 使用IntelliJ IDEA创建Java项目
准备: Intelliyu IDEA 下载好JDK1.8 方法一: 方法二
- Java学习day32
生产与消费者问题:假设仓库中只能存放一件产品,生产者将生产出来的产品放入仓库,消费者从仓库中取走产品:如果仓库中没有产品,生产者就将产品放入仓库,否则就停止生产等待:如果仓库中有产品,消费者就取走,否 ...
- Web安全中的常见Session攻击(预测+劫持+固定)
攻击者至少可以通过以下三种方式来获取一个有效的session标识符: 1.预测 2.捕获(劫持) 3.固定 一.会话预测 预测这种方式,也就是攻击者需要猜测出系统中使用的有效的session标识符(P ...
- Service vs Factory vs provider的迷惑
刚开始我很迷惑的,但是经过一段时间的项目,还有看大漠老师的东西,似乎明白了,他们的区别也就是 一个人喜欢吃面还是吃饭或者肯德基区别.目的就是填饱肚子! 以下是它们在AngularJS源代码中的定义: ...