改进 JavaScript 条件语句,探索可以替代 if...else 的 7 种方式!

image.png

当优化 JavaScript 代码时,条件语句是一个经常需要思考和改进的关键部分。if...else 结构虽然是我们常用的条件语句之一,但当代码逻辑变得复杂,if...else 结构可能会导致代码冗长、难以维护和理解。因此,了解并掌握优化 if...else 结构的方法对于提高代码的可读性、可维护性和性能至关重要。

本篇文章中将根据不同的条件语句场景,提供各种不同 JavaScript 条件语句的写法,重点关注如何替代 if...else 的写法,从简单的技巧和出发,目的是提高代码的简洁性和可读性。

image.png

1. 使用三元运算符

三元运算符是 JavaScript 中的一种条件表达式,可以用于简化 if...else 语句的写法。它的语法是:

condition ? expr1 : expr2;

其中,condition 是一个条件表达式,如果条件为真,则返回 expr1,否则返回 expr2。

下面用一个简单的示例,说明如何使用三元运算符优化条件语句对比:

示例:使用三元运算符优化条件语句对比

// 原始的 if...else 语句
let num = 0;
let result;
if (num > 0) {
  result = "positive";
} else if (num < 0) {
  result = "negative";
} else {
  result = "zero";
}
console.log(result);

使用三元运算符优化后

let num = 0;
let result = num > 0 ? "positive" : num < 0 ? "negative" : "zero";
console.log(result);

对于简单的条件语句,三元运算符是一个不错的选择,使用三元运算符可以使代码更加简洁和清晰,但在某些情况下也可能会影响代码的可读性。对于复杂的条件逻辑,建议慎重使用,也可以选用其他方式替代。

2. 使用逻辑与(&&)和逻辑或(||)

逻辑与(&&)和逻辑或(||)也是 JavaScript 中用于处理条件语句的方式之一,与三元运算符类似,逻辑与(&&)和逻辑或(||)可以帮助简化一些简单条件判断的写法。

示例:使用逻辑与(&&)和逻辑或(||)优化条件语句对比

// 原始的 if 语句
let num = 10;
let result;
if (num > 0) {
  result = "positive";
} else {
  result = "non-positive";
}
console.log(result);

使用逻辑与和逻辑或优化后

let num = 10;
let result = (num > 0 && "positive") || "non-positive";
console.log(result);

在上面的示例中,利用逻辑与(&&)和逻辑或(||)的短路特性来简化条件判断。

  • 当 num 大于 0 时,表达式 num > && 'positive' 的结果为 'positive',所以最终 result 的值为 'positive'

  • 当 num 不大于 0 时,表达式 num > 0 && 'positive'的结果为 false,然后逻辑或(||)操作符会返回结果'non-positive'

注意:利用逻辑与(&&)和逻辑或(||)优化条件语句的方法适用于简单的条件判断,在复杂的条件逻辑下,也可能会降低代码的可读性。在编写代码时需要根据具体情况选择合适的方式来处理条件语句,以确保代码的清晰和易于维护。

3. 使用对象字面量(Object Literal)

使用对象字面量(Object Literal)通过将不同条件对应的值存储在对象字面量中,然后通过读取对象属性的方式来获取对应的值,使代码更加清晰和易于维护。

示例:使用对象字面量优化条件语句对比

// 原始的 if-else 语句
let color = "red";
let fruit;

if (color === "red") {
  fruit = "apple";
} else if (color === "yellow") {
  fruit = "banana";
} else {
  fruit = "unknown";
}
console.log(fruit);

使用对象字面量优化后

let color = "red";
let fruit =
  {
    red: "apple",
    yellow: "banana",
  }[color] || "unknown";

console.log(fruit);

在上面的示例中,使用对象字面量来优化条件语句。通过将不同条件对应的值存储在对象字面量中,然后通过读取对象属性的方式来获取对应的值,能够简化 if-else 结构。在这个例子中,根据 color 的不同取值,直接获取对应水果名称的逻辑。

使用对象字面量的优化方法可以使代码更加简洁和易读,特别是在多个条件需要判断并返回不同值的情况下,可以替代冗长的 if-else 结构。当然,也需要根据具体情况选择合适的优化方式,以确保代码的清晰和可维护性。

4. 使用对象映射表(Map)

使用对象映射表(Map)适用于需要根据不同条件执行不同操作的情况,将不同条件和对应操作存储在 Map 中,根据条件获取对应的操作执行。

示例:使用对象映射表(Map)优化条件语句对比

// 原始的 if-else 语句
let condition = "B";

if (condition === "A") {
  console.log("执行A操作");
} else if (condition === "B") {
  console.log("执行B操作");
} else if (condition === "C") {
  console.log("执行C操作");
}

使用对象映射表(Map)优化后

let conditionsMap = new Map([
  ["A", () => console.log("执行A操作")],
  ["B", () => console.log("执行B操作")],
  ["C", () => console.log("执行C操作")],
]);

if (conditionsMap.has(condition)) {
  conditionsMap.get(condition)();
}

通过上述的代码,使用对象映射表(Map)将不同条件和对应操作存储在 Map 中,根据条件获取对应的操作执行。

使用对象映射表(Map)优化条件语句的方法可以简化代码逻辑,提高代码的可读性和可维护性。特别适用于需要根据多个条件执行不同的情况,可以将条件和对应操作一一映射存储,通过 Map 快速获取执行对应操作。

5. 使用 Array.includes

使用 Array.includes 方法适用于需要判断某个值是否包含在一个数组中的情况,大大简化了条件判断的过程。

示例:使用 Array.includes 优化条件语句对比

// 原始的 if-else 语句
let fruit = "apple";
let isFruit = false;

if (fruit === "apple" || fruit === "banana" || fruit === "orange") {
  isFruit = true;
}
console.log(isFruit);

使用 Array.includes 优化后

let fruit = "apple";
let fruits = ["apple", "banana", "orange"];
let isFruit = fruits.includes(fruit);
console.log(isFruit);

在上面的示例中,原始的 if-else 结构需要逐个判断 fruit 是否等于 'apple'、'banana' 或 'orange',而使用 Array.includes 方法则可以直接判断 fruit 是否包含在 fruits 数组中,从而简化了条件判断的过程。

使用 Array.includes 方法的优化方法适合于需要判断某个值是否属于一个集合的情况,避免了重复的多次判断。当需要判断值是否包含在某个数组中时,可以考虑使用 Array.includes 方法来优化条件语句。

注意:Array.includes  属于 ES6+ 中新增的方法,因此在较旧的浏览器版本中可能不被支持,为了确保网页在各种浏览器中的兼容性,如果需要使用 Array.includes 方法,可以考虑使用 Babel 或其他类似的工具来转译代码,将 ES6 的语法转换为能在更多浏览器中运行的 ES5 代码。

image.png

6. 使用 Array.every

使用 Array.every 方法适用于需要对数组中的所有元素进行条件判断的情况。

示例:使用 Array.every 优化条件语句对比

// 原始的 if-else 语句
let numbers = [2, 4, 6, 8];
let allEven = true;

for (let i = 0; i < numbers.length; i++) {
  if (numbers[i] % 2 !== 0) {
    allEven = false;
    break;
  }
}
console.log(allEven);

使用 Array.every 优化后

let numbers = [2, 4, 6, 8];
let allEven = numbers.every((num) => num % 2 === 0);
console.log(allEven);

原始的 if-else 结构通过遍历数组中的所有元素,判断是否全部为偶数,而使用 Array.every 方法则可以直接对数组中的每个元素应用条件判断,并返回是否所有素都满足条件的结果。

使用 Array.every 方法的优化方法适合于需要对数组中所有元素进行条件判断的情况,能够大幅度的简化代码逻辑。当需要判断数组中所有元素是否满足某个条件时,可以考虑使用 Array.every 方法来优化条件语句。

7. 使用 switch...case

使用 switch...case 适用于多个条件需要进行严格相等比较的情况。

示例:使用 switch...case 优化条件语句对比

// 原始的 if-else 语句
let fruit = "apple";
let color = "";

if (fruit === "apple") {
  color = "red";
} else if (fruit === "banana") {
  color = "yellow";
} else if (fruit === "orange") {
  color = "orange";
} else {
  color = "unknown";
}
console.log(color);

使用 switch...case 优化后

let fruit = "apple";
let color = "";

switch (fruit) {
  case "apple":
    color = "red";
    break;
  case "banana":
    color = "yellow";
    break;
  case "orange":
    color = "orange";
    break;
  default:
    color = "unknown";
}
console.log(color);

在上面的示例中,原始的 if-else 结构包含多个条件判断,而使用 switch...case 结构可以更清晰地将不同情况分支进行处理,适用于多个严格相等比较的情况。

使用 switch...case 语句的优化方法适合于需要根据不同值进行严格相等比较的情况,能够简化逻辑,提高代码的可读性和可维护性。当需要对多个条件进行严格相等比较时,可以考虑使用 switch...case 语句来优化条件语句。

 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

力扣61~65题

题61&#xff08;中等&#xff09;&#xff1a; 分析&#xff1a; python代码&#xff1a; # Definition for singly-linked list. # class ListNode: # def __init__(self, val0, nextNone): # self.val val # self.next next class Solution:def rot…

014_django基于大数据运城市二手房价数据可视化系统的设计与实现2024_3ahrxq75

目录 系统展示 开发背景 代码实现 项目案例 获取源码 博主介绍&#xff1a;CodeMentor毕业设计领航者、全网关注者30W群落&#xff0c;InfoQ特邀专栏作家、技术博客领航者、InfoQ新星培育计划导师、Web开发领域杰出贡献者&#xff0c;博客领航之星、开发者头条/腾讯云/AW…

Java爬虫:从入门到精通实战指南

在信息技术飞速发展的今天&#xff0c;数据已成为最宝贵的资源之一。Java作为一种成熟且功能强大的编程语言&#xff0c;不仅在企业级应用开发中占据主导地位&#xff0c;也成为了编写爬虫程序的理想选择。Java爬虫能够自动化地从网页或API中提取数据&#xff0c;为数据分析、机…

银河麒麟V10系统+Windows10双系统启动顺序正确修改方法

***正确可行方法***&#xff0c;测试OK且稳定&#xff1b; 银河麒麟桌面操作系统V10是一款适配国产软硬件平台并深入优化和创新的新一代图形化桌面操作系统&#xff0c;同源支持国内外主流处理器架构&#xff0c;并不断使能GPU、桥片、网卡等各种新硬件&#xff0c;提供更优的软…

精华帖分享 | 从华泰研报出发,开启人工智能炼丹篇章!

最近研究完邢大新发布的各种框架后&#xff0c;突然冒出了想当牛马的想法。但是&#xff0c;本人作为一个量化小白&#xff0c;从头开始到变成牛马那必定是道阻且长。于是我决定从彩虹几乎没有涉及到的角度入手&#xff1a;做人工智能深度学习系列。 那为什么要做这个系列呢&a…

【MySQL实战45讲8】事务到底是隔离还是不隔离

文章目录 前言案例“快照”在MVCC里是怎么工作的更新逻辑 前言 如果是可重复读隔离级别&#xff0c;事务T启动的时候会创建一个视图read-view&#xff0c;之后事务T执行期间&#xff0c;即使有其他事务修改了数据&#xff0c;事务T看到的仍然跟在启动时看到的一样。 但当一个…

Jmeter进行http接口测试

&#x1f345; 点击文末小卡片 &#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 本文主要针对http接口进行测试&#xff0c;使用jmeter工具实现。 Jmeter工具设计之初是用于做性能测试的&#xff0c;它在实现对各种接口的调用方面已经做的比较…

春日技术问答:Spring Boot课程答疑助手

5系统详细实现 5.1 管理员模块的实现 5.1.1 学生信息管理 课程答疑系统的系统管理员可以管理学生&#xff0c;可以对学生信息添加修改删除以及查询操作。具体界面的展示如图5.1所示。 图5.1 学生信息管理界面 5.1.2 科目类型管理 系统管理员可以查看对科目类型信息进行添加&a…

SQL进阶技巧:如何删除第N次连续出现NULL值所存在的行?

目录 0 场景描述 1 数据准备 2 问题分析 问题拓展:如何删除第2次、第3次、第N次连续出现NULL值所在的行? 3 小结 0 场景描述 有下面的场景: 我们希望删除某id中连续存在NULL值的所有行,但是保留第一次出现不为NULL值的以下所有存在NULL值的行。具体如下图所示: 如…

复合泊松过程

复合泊松过程的均值、方差与特征函数 复合泊松过程的定义 复合泊松过程 ( Y(t) ) 是一种常见的随机过程&#xff0c;通常定义为&#xff1a; Y ( t ) ∑ k 1 N ( t ) X k Y(t) \sum_{k1}^{N(t)} X_k Y(t)k1∑N(t)​Xk​ 其中&#xff1a; ( N(t) ) 是一个强度为 ( \lambd…

2024年软件设计师中级(软考中级)详细笔记【6】结构化开发方法(分值3~4)

目录 前言6.1 系统分析与设计概述6.1.2 系统设计的基本原理6.1.3 系统总体结构设计6.1.4 系统文档6.2.2 数据流图6.2.3 数据字典&#xff08;DD&#xff09; 6.5 用户界面设计6.5.1 用户界面设计的黄金原则杂题习题&#xff1a; 结语 前言 在备考软件设计师中级考试的过程中&a…

Flink Kubernetes Operator

Flink Kubernetes Operator是一个用于在Kubernetes集群上管理Apache Flink应用的工具。 一、基本概念 Flink Kubernetes Operator允许用户通过Kubernetes的原生工具&#xff08;如kubectl&#xff09;来管理Flink应用程序及其生命周期。它简化了Flink应用在Kubernetes集群上的…

markdown 笔记,语法,技巧

起因&#xff0c; 目的: markdown 有些语法&#xff0c;不常用&#xff0c;记不住。单独记录一下。 1. 插入数学公式 用 $$ 来包裹住多行数学公式。 $$ 多行数学公式 $$ 2. 2个星号 ** &#xff0c; 加粗&#xff0c; 3. 单行代码的 引用&#xff0c; 左右各一个顿号 8.…

生成器和迭代器

迭代器 定义 迭代器是一个实现了选代协议的对象&#xff0c;它可以让我们遍历一个容器中的所有元素&#xff0c;而不需要知道容器的内部结构&#xff0c;迭代器可以被用于遍历列表、元组、字典、集合等容器类型。 工作原理 __iter__():方法返回迭代器对象本身&#xff0c;有…

你们还在用8位单片机吗?

以前做过挺多8位机的&#xff0c;51内核的产品&#xff0c;比如楼层刷卡器用的STC的&#xff0c;还有计量产品&#xff0c;里面也是51内核计量单元等集成的SOC芯片。 类似的太多了&#xff0c;比如TI早期的Zigbee芯片&#xff0c;蓝牙芯片&#xff0c;很多都是8位的51内核。 8位…

leetcode_887_鸡蛋掉落___循序渐进的分析

分析&#xff1a;对于一组[n,k] 在一次尝试中选择了在dep层测试 其可以分为 如果在dep层炸了: 则变成了[dep-1,k-1]读作在dep-1层用k-1个鸡蛋来找鸡蛋的极限所需次数如果在dep层没炸: 则变成了[n-dep,k]读作在n-dep层用k个鸡蛋来找鸡蛋的极限所需次数可以发现这都是子问题的…

【Python爬虫实战】正则:从基础字符匹配到复杂文本处理的全面指南

&#x1f308;个人主页&#xff1a;https://blog.csdn.net/2401_86688088?typeblog &#x1f525; 系列专栏&#xff1a;https://blog.csdn.net/2401_86688088/category_12797772.html 目录 前言 一、正则表达式 &#xff08;一&#xff09;正则表达式的基本作用 &#xf…

【RabbitMQ】RabbitMQ 7种工作模式简单使用示例

目录 1. 简单模式 2. Work Queues(作队列) 3. Publish/Subscribe(发布/订阅) 4. Routing(路由模式) 5. Topics(通配符模式) 6. RPC(RPC通信) 7. Publisher Confirms(发布确认) 7.1Publishing Messages Individually(单独确认) 7.2 Publishing Messages in Batches(批…

【实战篇】用SkyWalking排查线上[xxl-job xxl-rpc remoting error]问题

一、组件简介和问题描述 SkyWalking 简介 Apache SkyWalking 是一个开源的 APM&#xff08;应用性能管理&#xff09;工具&#xff0c;专注于微服务、云原生和容器化环境。它提供了分布式追踪、性能监控和依赖分析等功能&#xff0c;帮助开发者快速定位和解决性能瓶颈和故障。…

Tbox编译注意问题

Tbox是一个强大的开源库&#xff0c;感谢做为ruki的无私奉献。 tbox: 跨平台的c开发库&#xff0c;提供asio、stream、容器、算法、xml/json/plist解析、数据库等常用模块 在使用tbox开源库的数据库模块时&#xff0c;没有使用xmake进行编译&#xff0c;而是使用make编译的。…