当前位置: 首页 > news >正文

Js基础——数据类型之Null和Undefined

原始值就是值本身不可改变,并且没有方法和属性。操作的时候看似操作原始值,其实是操作它的副本。

Null 代表空指针,就是没有对象存在,它不是全局对象的属性。Null type对应唯一的字面量值null
Undefined 是全局对象的属性,它对应的唯一字面量值undefined
出现的情况:
1.变量声明没有赋值,变量的默认值是undefined
2.函数没有return,那么默认返回值是undefined
3.方法或是语句中没有赋值的变量,返回值是undefined
栗子?
图片描述

不要把undefined作为变量名赋值,这样不仅会改变undefined的值,也会改变它的类型,这种情况的验证条件是不在全局环境中。undefined并不是关键字,所以避免这种情况
图片描述

如果要判断一个值是不是undefined,有三种方式
1.直接比较值跟字面量undefined,这是比较要用全等===
2.就是用typeof 值跟类型’undefined’比较,这个可以在变量没有声明的情况下判断,而不会出错
3.用void 0代替undefined
栗子?
图片描述

参考资料:https://developer.mozilla.org...
https://developer.mozilla.org...

扩展补充:
用void 0 代替undefined很好,为什么要代替undefined?为什么是void 0而不是其他的?
原因:1.undefined在全局环境下,已经是只读属性不可改变,但是在块作用域里还是可以改变的,因为它不是保留关键字,所以无法避免被重新赋值改变。这也是为什么需要替代它的原因。
2.因为void这个操作符,后面跟上任何的表达式或是语句,返回值都是undefined,而void 0是所有表达式中最短的一个,最完美的是void 0还不能重写
3.在这里我也终于明白了,当初想让链接跳转失效,在a标签这样写的用意,就是因为void(0)返回为undefined

<a href="javascript:void(0);">
  Click here to do nothing
</a>

4.也理解了在一些源码中,看到函数关键字function的前面会有void,它可以迫使函数声明变成函数表达式
栗子?
图片描述

参考资料:https://developer.mozilla.org...
http://web.jobbole.com/86145/

Null vs Undefined
区别:null表示’空’的对象,转数值为0,undefined表示‘此处无意义’的原始值,转数值为NaN
undefined强调’不存在’,适用的场景:
比如:
1.不存在的初始值
2.不存在的对象属性,或是数组项
3.不存在的函数返回值
4.不存在的函数调用参数
栗子?
图片描述

null的适用场景:
1.遍历一个不存在的dom节点
2.在页面销毁的时候,把不用的对象赋值为null

二者同为没有值的代表,在判断中都是false,但你要是想当然觉得它们相等,那就上当了。别忘了它们是不同的类型
栗子?
图片描述

参考资料:https://yanhaijing.com/javasc...

相关文章:

  • 如何调用带返回值类型的函数
  • 通过pfSense阻止对某个网站的访问
  • scala基础语法(二)
  • python subprocess
  • linux笔记4.0
  • Oracle毙掉JavaOne
  • node入门
  • HTML5+CSS3+jQuery Mobile轻松构造APP与移动网站 (陈婉凌) 中文pdf扫描版
  • 拓展jquery js动态添加html代码 初始化数据
  • 几种编码格式
  • “Head First 设计模式“ :适配器模式
  • 一个披萨电影夜,你到底泄露了多少个人数据?
  • web项目中web.xml的作用
  • 【特征选择】过滤式特征选择法
  • 学习在.NET Core中使用RabbitMQ进行消息传递之持久化(二)
  • Git学习与使用心得(1)—— 初始化
  • Java 9 被无情抛弃,Java 8 直接升级到 Java 10!!
  • javascript数组去重/查找/插入/删除
  • js正则,这点儿就够用了
  • nodejs调试方法
  • vuex 笔记整理
  • 阿里云应用高可用服务公测发布
  • 前端面试题总结
  • 让你成为前端,后端或全栈开发程序员的进阶指南,一门学到老的技术
  • 继 XDL 之后,阿里妈妈开源大规模分布式图表征学习框架 Euler ...
  • 数据库巡检项
  • ​html.parser --- 简单的 HTML 和 XHTML 解析器​
  • ​LeetCode解法汇总307. 区域和检索 - 数组可修改
  • ​一些不规范的GTID使用场景
  • #pragma预处理命令
  • #我与Java虚拟机的故事#连载15:完整阅读的第一本技术书籍
  • (6)【Python/机器学习/深度学习】Machine-Learning模型与算法应用—使用Adaboost建模及工作环境下的数据分析整理
  • (附源码)springboot社区居家养老互助服务管理平台 毕业设计 062027
  • (免费领源码)Python#MySQL图书馆管理系统071718-计算机毕业设计项目选题推荐
  • (四)docker:为mysql和java jar运行环境创建同一网络,容器互联
  • (四)linux文件内容查看
  • (一)C语言之入门:使用Visual Studio Community 2022运行hello world
  • (原创) cocos2dx使用Curl连接网络(客户端)
  • (转)重识new
  • **PyTorch月学习计划 - 第一周;第6-7天: 自动梯度(Autograd)**
  • .“空心村”成因分析及解决对策122344
  • .NET Micro Framework 4.2 beta 源码探析
  • .net wcf memory gates checking failed
  • .net 程序发生了一个不可捕获的异常
  • .NET 使用 ILRepack 合并多个程序集(替代 ILMerge),避免引入额外的依赖
  • .NET 中 GetProcess 相关方法的性能
  • .Net 中的反射(动态创建类型实例) - Part.4(转自http://www.tracefact.net/CLR-and-Framework/Reflection-Part4.aspx)...
  • .net反混淆脱壳工具de4dot的使用
  • [2021ICPC济南 L] Strange Series (Bell 数 多项式exp)
  • [ai笔记9] openAI Sora技术文档引用文献汇总
  • [bzoj1324]Exca王者之剑_最小割
  • [C# WPF] 如何给控件添加边框(Border)?
  • [C]整形提升(转载)
  • [C++]类和对象【下】
  • [CQOI 2010]扑克牌