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

最新文章

  1. 关于LESS
  2. 【BZOJ】3495: PA2010 Riddle
  3. jquery函数和javascript函数的区别
  4. js与uri中location关系
  5. 【Android - V】之DrawerLayout的使用
  6. C语言--关键字、标识(zhi)符、注释
  7. 得到css style
  8. xargs命令详解,xargs与管道的区别
  9. [DeeplearningAI笔记]ML strategy_2_3迁移学习/多任务学习
  10. IO流之字符流知识总结
  11. AI时代大点兵-国内外知名AI公司2018年最新盘点
  12. mysql慢日志, 锁表情况查询
  13. Tomcat 的 server.xml 文件详解
  14. Prometheus Redis_exporter
  15. Hadoop HBase概念学习系列之HLog(二)
  16. ie兼容图片缩小后模糊失真(锯齿)问题
  17. javascript节点操作appendChild()
  18. 设置VS快捷代码片段
  19. office在繁体系统下 导入导出 功能灰显的解决方法
  20. 【Set jsonObj = toJson( jsonString )】创建JSON实例

热门文章

  1. led指示灯电路图大全(八款led指示灯电路设计原理图详解)
  2. SQL之总结(二)
  3. Initialization failed for 'https://start.spring.io
  4. C#编写一个控制台应用程序,输入正方形边长或者半径,计算其周长和面积并输出
  5. hdfs对文件的增删改查
  6. 多态polymorphism,向上转型和动态方法调度有什么用?
  7. vue引入swiper
  8. Spring相关的API-ApplicationContext
  9. SSM实现个人博客-day04
  10. 帝国CMS模板$GLOBALS[navclassid]用法详解