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
最新文章
- 关于LESS
- 【BZOJ】3495: PA2010 Riddle
- jquery函数和javascript函数的区别
- js与uri中location关系
- 【Android - V】之DrawerLayout的使用
- C语言--关键字、标识(zhi)符、注释
- 得到css style
- xargs命令详解,xargs与管道的区别
- [DeeplearningAI笔记]ML strategy_2_3迁移学习/多任务学习
- IO流之字符流知识总结
- AI时代大点兵-国内外知名AI公司2018年最新盘点
- mysql慢日志, 锁表情况查询
- Tomcat 的 server.xml 文件详解
- Prometheus Redis_exporter
- Hadoop HBase概念学习系列之HLog(二)
- ie兼容图片缩小后模糊失真(锯齿)问题
- javascript节点操作appendChild()
- 设置VS快捷代码片段
- office在繁体系统下 导入导出 功能灰显的解决方法
- 【Set jsonObj = toJson( jsonString )】创建JSON实例
热门文章
- led指示灯电路图大全(八款led指示灯电路设计原理图详解)
- SQL之总结(二)
- Initialization failed for 'https://start.spring.io
- C#编写一个控制台应用程序,输入正方形边长或者半径,计算其周长和面积并输出
- hdfs对文件的增删改查
- 多态polymorphism,向上转型和动态方法调度有什么用?
- vue引入swiper
- Spring相关的API-ApplicationContext
- SSM实现个人博客-day04
- 帝国CMS模板$GLOBALS[navclassid]用法详解