✨JavaScript 第十一章(深入理解null与undefined)

在JavaScript的世界里,null和undefined是两个表示“没有值”的概念,但它们之间有着微妙的差别。undefined是当一个变量被声明了,但没有被赋值时,它的默认值。这是JavaScript引擎的工作,我们通常不会手动设置一个变量为undefined。相反,null是一个表示无值的对象,通常用于主动指示变量不应该有值。
开发技巧方面,理解这两者的区别对于编写清晰、可维护的代码至关重要。下面是一些关于如何使用nullundefined的开发技巧:

  1. 初始化变量:当声明一个变量,但暂时不赋值时,它会默认为undefined。如果你的逻辑需要区分“未赋值”和“赋值为无”,可以显式地将变量初始化为null

    let user = null; // 显式地表示user变量目前没有值
    
  2. 函数参数默认值:在ES6及以后版本中,可以为函数参数设置默认值。如果参数未传递,它们将默认为undefined,这时默认值会生效。如果你传递了null,则表示你已经考虑了这个参数,但希望它为空。

    function greet(name = 'Guest') {console.log(`Hello, ${name}!`);
    }
    greet(); // 输出: Hello, Guest!
    greet(null); // 输出: Hello, null!
    
  3. 可选链操作符(Optional Chaining):使用?.可以在尝试访问对象的属性时,如果引用是nullundefined,则表达式短路返回undefined,而不是抛出错误。

    const person = {name: 'Alice',address: null
    };
    console.log(person.address?.street); // 输出: undefined
    
  4. 空值合并操作符(Nullish Coalescing):使用??可以为nullundefined的变量提供一个默认值。这比使用逻辑或操作符||更准确,因为||会对任何假值(如0或空字符串)都提供默认值。

    const settings = {timeout: 0
    };const timeout = settings.timeout ?? 3000; // 使用??来判断,因为0是有效值
    console.log(timeout); // 输出: 0
    
  5. 类型检查:使用typeof检查一个变量是否为undefined,而不要直接与undefined进行比较。因为undefined可以被重新赋值,但typeof的结果是可靠的。

    let value;
    if (typeof value === 'undefined') {console.log('value未定义');
    }
    
  6. 严格比较:在比较时使用三等号===来区分nullundefined。这样可以避免因隐式类型转换导致的错误。

    let value1 = null;
    let value2;if (value1 === null) {console.log('value1是null');
    }if (value2 === undefined) {console.log('value2是undefined');
    }
    
  7. API设计:在设计返回值或回调参数时,如果一个操作没有产生值,可以使用null来表示“操作完成,但无值返回”。这样调用者可以区分“未完成”和“完成但无值”。

    function fetchData(callback) {// 模拟数据获取let data = null; // 假设没有数据返回if (data) {callback(null, data);} else {callback(null, null); // 第二个参数为null表示没有数据}
    }fetchData((error, data) => {if (error) {console.error(error);} else if (data === null) {console.log('操作完成,但无数据返回');} else {console.log('获取到数据:', data);}
    });
    
  8. 数据清理:当需要清除一个对象属性或变量时,可以将其设置为null来表示已经被清空,而不是留下undefined,这样可以更清晰地表达开发者的意图。

    let user = {name: 'John Doe',age: 30
    };// 清除用户年龄
    user.age = null;console.log(user); // 输出: { name: 'John Doe', age: null }
    

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/646699.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【MySQL实践】一个隐蔽的问题导致 Field ‘xxx‘ doesn‘t have a default value

文章目录 1.背景2.问题处理3.思考与总结 1.背景 最后在公司的后台系统上遇到了一个线上问题,是在插入某个表数据的时候出现了数据库的插入异常,即:java.sql.SQLException: Field xxx doesnt have a default value,这其实是一个比…

javaweb-js-vue基础知识(持续更新中)

sshu 双向数据绑定 ---------------------------------------------------------- 注意淘宝镜像最新网址发生变化,记得改,不是老师现在用的那个,不然会下载出错!!! 没有的:ctrlshiftp&#xff…

apipost和curl收不到服务器响应的HTTP/1.1 404 Not Found

windows的apipost发送请求后,服务器响应了HTTP/1.1 404 Not Found,但是apipost一直显示发送中。 linux上的curl也一样。 使用wireshark抓包发现收到了响应,但是wireshark识别不了(图中是回应404后关闭了连接)&#xff…

fsx 简介:适用于 JavaScript 的现代文件系统 API

JavaScript 运行时中的文件系统 API 已经很久没有这么好了,这是我试图做出一个更好的文件系统 API 的尝试。 我们今天拥有的 JavaScript API 比十年前要好得多。考虑一下从 XMLHttpRequest 到 fetch() 的转变:开发者体验显著改善,允许我们编…

Chatgpt的崛起之路

Chatgpt的崛起之路 背景与发展历程背景发展历程 技术原理第一阶段:训练监督策略模型第二阶段:训练奖励模型第三阶段:采用强化学习来增强模型的能力。 国内使用情况及应用的领域面临的数据安全挑战与建议ChatGPT获取数据产生的问题数据泄露问题…

@Scheduled笔记240124

Scheduled的参数 常用的Scheduled注解属性: fixedRate属性:根据固定的频率执行任务。 Scheduled(fixedRate 5000) // 每隔5秒执行一次fixedDelay属性:任务完成后,等待一段固定的时间再执行下一次。 Scheduled(fixedDelay 5000…

HJ12 字符串反转【C语言】

【华为机试题 HJ12】字符串反转 描述输入描述:输出描述:示例1参考代码1描述 接受一个只包含小写字母的字符串,然后输出该字符串反转后的字符串。(字符串长度不超过1000) 输入描述: 输入一行,为一个只包含小写字母的字符串。 输出描述: 输出该字符串反转后的字符串…

Unity串口通信教程:基础知识和实践指南

概述 Unity在游戏开发和实时应用中广泛使用。除了图形渲染和游戏逻辑,Unity还能与外部硬件设备进行串口通信。本文将介绍如何在Unity中实现串口通信,包括基础设置、数据读写、数据校验和异或操作。 基础设置 引入命名空间 首先,需要引入Syste…

接口自动化测试:mock server之Moco工具

什么是mock server mock:英文可以翻译为模仿的,mock server是我们用来解除依赖(耦合),假装实现的技术,比如说,前端需要使用某些api进行调试,但是服务端并没有开发完成这些api&#…

测试人年终总结:入行三年,下一步怎么走,思想碰撞

原贴地址:入行三年,下一步怎么走,思想碰撞 TesterHome 熟悉环境,进步缓慢;停止思考,举步不前(为什么会有这篇文章why 初心变质:计算机系毕业,毕业时的打算是从测试进&a…

程序员如何保持身心健康

程序员要保持身心健康,可以注意以下几个方面: 饮食健康:保持均衡的饮食,多吃蔬菜水果,减少油腻和高热量食物的摄入。同时,适当饮水,避免因长时间坐着工作而导致的脱水。尽量不要吃街边摊、大排…

#常见问题总结#在docker中跑前端vue项目

目录 前言一、no such file or directory, open...总结 前言 提示:这里可以添加本文要记录的大概内容: 记录在docker中跑前端项目过程中,我遇到的问题以及解决方法 提示:以下是本篇文章正文内容,下面案例可供参考 一…

大数据数据可视化工具ECharts,从入门到精通!

介绍:ECharts是一个强大的数据可视化图表库,它基于JavaScript开发,并具有丰富的特性和灵活性。 多平台支持:ECharts可以在PC和移动设备上流畅运行,它对移动端进行了优化,确保在不同设备上都有良好的展示效果…

为什么游戏公司开发一个游戏需要上亿资金

** 为什么游戏公司开发一个游戏需要上亿资金 ** 游戏界有句老话:要做游戏,没上亿准备别来碍手碍脚。说直白点,就是要想在这个竞争激烈的蓝海里立足,开发一款像模像样的游戏,需要有几亿元的资金准备。 可能有人会觉得…

互联网泛人才流动报告:大厂扩张按下暂停键,这家公司逆势给出5w月薪招人

前段时间,脉脉高聘人才智库发布了《2023年互联网泛人才流动报告》,似乎佐证了23年是互联网真正的寒冬…… 卷生卷死!5个人竞争2个岗位 2023年,互联网行业的求职难度可以说是地狱级别,人才供需比持续上升,…

什么是Spring

文章目录 什么是Spring什么是 IoC Spring的IoCDI的概念 什么是Spring Spring 是一个包含了众多工具方法的 IoC容器。 什么是 IoC Inversion of Control — 控制反转 在传统的开发中,假设A类依赖于B类,那么创建A对象实例就需要先new一个B类对象&#x…

分享本机搭建《幻兽帕鲁》服务,并可以外网联机的方法

由于《幻兽帕鲁》玩家好评率也高达93%,天卖出600万份,爆火游戏幻兽帕鲁最高180万人同时在线,直接登顶,也有不少玩家从中体会到了难得的“当老板”的乐趣。官方虽然支持联机人数更多,但是由于游戏过于火爆,服…

瑞_力扣LeetCode_101. 对称二叉树

文章目录 题目 101. 对称二叉树题解方式一 递归方式二 迭代 🙊 前言:本文章为瑞_系列专栏之《刷题》的力扣LeetCode系列,主要以力扣LeetCode网的题进行解析与分享。本文仅供大家交流、学习及研究使用,禁止用于商业用途&#xff0c…

代码随想录算法训练营第十六天| 104.二叉树的最大深度 ● 111.二叉树的最小深度 ● 222.完全二叉树的节点个数

104.二叉树的最大深度 本题可以使用前序(中左右),也可以使用后序遍历(左右中),使用前序求的就是深度,使用后序求的是高度。 ●二叉树节点的深度:指从根节点到该节点的最长简单路径边…

Java Web(四)--JavaScript

介绍 JavaScript 教程 JavaScript 能改变 HTML 内容,能改变 HTML 属性,能改变 HTML 样式 (CSS),能完成页面的数据验证; JS 需要运行浏览器来解析执行JavaScript 代码; JS 是 Netscape 网景公司的产品&#xf…