当前位置: 首页 > 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进行消息传递之持久化(二)
  • 《Java编程思想》读书笔记-对象导论
  • 【Amaple教程】5. 插件
  • 【JavaScript】通过闭包创建具有私有属性的实例对象
  • 5分钟即可掌握的前端高效利器:JavaScript 策略模式
  • CAP理论的例子讲解
  • es的写入过程
  • Java面向对象及其三大特征
  • nfs客户端进程变D,延伸linux的lock
  • PHP的类修饰符与访问修饰符
  • VUE es6技巧写法(持续更新中~~~)
  • 从零开始的webpack生活-0x009:FilesLoader装载文件
  • 分享一个自己写的基于canvas的原生js图片爆炸插件
  • 干货 | 以太坊Mist负责人教你建立无服务器应用
  • 前端性能优化--懒加载和预加载
  • 手写双向链表LinkedList的几个常用功能
  • 一个项目push到多个远程Git仓库
  • 策略 : 一文教你成为人工智能(AI)领域专家
  • 大数据全解:定义、价值及挑战
  • ​猴子吃桃问题:每天都吃了前一天剩下的一半多一个。
  • ​如何在iOS手机上查看应用日志
  • # Swust 12th acm 邀请赛# [ E ] 01 String [题解]
  • #NOIP 2014# day.1 生活大爆炸版 石头剪刀布
  • (1综述)从零开始的嵌入式图像图像处理(PI+QT+OpenCV)实战演练
  • (windows2012共享文件夹和防火墙设置
  • (zz)子曾经曰过:先有司,赦小过,举贤才
  • (附源码)springboot 智能停车场系统 毕业设计065415
  • (附源码)计算机毕业设计ssm电影分享网站
  • (黑马C++)L06 重载与继承
  • (机器学习-深度学习快速入门)第三章机器学习-第二节:机器学习模型之线性回归
  • (深入.Net平台的软件系统分层开发).第一章.上机练习.20170424
  • (已解决)什么是vue导航守卫
  • (最简单,详细,直接上手)uniapp/vue中英文多语言切换
  • *上位机的定义
  • .cn根服务器被攻击之后
  • .NET WebClient 类下载部分文件会错误?可能是解压缩的锅
  • .NET 中各种混淆(Obfuscation)的含义、原理、实际效果和不同级别的差异(使用 SmartAssembly)
  • .NET平台开源项目速览(15)文档数据库RavenDB-介绍与初体验
  • .net中我喜欢的两种验证码
  • @Controller和@RestController的区别?
  • @四年级家长,这条香港优才计划+华侨生联考捷径,一定要看!