​不要在 JavaScript 中使用 If-Else 和 Switch,使用对象字面量

不要在 JavaScript 中使用 If-Else 和 Switch,使用对象字面量

WEB前端开发社区 2021-07-17

在 JavaScript 中编写复杂的条件总是有可能创建一些非常混乱的代码。一长串 if/else 语句或 switch 案例会很快变得臃肿。

当有多个条件时,我发现对象字面量是构建代码的最易读的方式。让我们来看看它们是如何工作的。

例如,假设我们有一个函数,它接受一个押韵的短语并返回其含义。使用 if/else 语句,它看起来像这样:

function getTranslation(rhyme) {

if (rhyme.toLowerCase() === "apples and pears") {

return "Stairs";

} else if (rhyme.toLowerCase() === "hampstead heath") {

return "Teeth";

} else if (rhyme.toLowerCase() === "loaf of bread") {

return "Head";

} else if (rhyme.toLowerCase() === "pork pies") {

return "Lies";

} else if (rhyme.toLowerCase() === "whistle and flute") {

return "Suit";

}

return "Rhyme not found";

}

这不是很好。它不仅可读性差,而且我们还为每个语句重复 toLowerCase()。

我们可以通过在函数的开头将小写分配给一个变量来避免这种重复,或者使用 switch 语句,如下所示:

function getTranslation(rhyme) {

switch (rhyme.toLowerCase()) {

case "apples and pears":

return "Stairs";

case "hampstead heath":

return "Teeth";

case "loaf of bread":

return "Head";

case "pork pies":

return "Lies";

case "whistle and flute":

return "Suit";

default:

return "Rhyme not found";

}

}

我们现在只调用 toLowerCase() 一次,但这仍然没有什么可读性。switch 语句也容易出错。

在这种情况下,我们只是返回一个值,但是当你具有更复杂的功能时,很容易错过 break 语句并引入错误。

替代方案

你可以使用对象以更简洁的方式实现与上述相同的功能。让我们看一个例子:

function getTranslationMap(rhyme) {

const rhymes = {

"apples and pears": "Stairs",

"hampstead heath": "Teeth",

"loaf of bread": "Head",

"pork pies": "Lies",

"whistle and flute": "Suit",

};

return rhymes[rhyme.toLowerCase()] ?? "Rhyme not found";

}

我们有一个对象,其中键是条件,值是响应。然后我们可以使用方括号符号从传入的韵中选择对象的正确值。

第 10 行的最后一部分(?? “Rhyme not found”)使用无效合并来分配默认响应。这意味着如果 rhymes[rhyme.toLowercase()] 为 null 或未定义(但不是 false 或 0 ),则返回默认字符串“Rhyme not found”。这很重要,因为我们可能合法地希望从我们的条件中返回 false 或 0。例如:

function stringToBool(str) {

const boolStrings = {

"true": true,

"false": false,

};

return boolStrings[str] ?? "String is not a boolean value";

}

这是一个非常人为的示例,但希望它说明了无效合并如何帮助避免引入错误!

更复杂的逻辑

有时你可能需要在你的条件中执行一些更复杂的逻辑。为此,你可以将函数作为值传递给对象键并执行响应:

function calculate(num1, num2, action) {

const actions = {

add: (a, b) => a + b,

subtract: (a, b) => a - b,

multiply: (a, b) => a * b,

divide: (a, b) => a / b,

};

return actions[action]?.(num1, num2) ?? "Calculation is not recognised";

}

我们正在选择我们想要做的计算并执行响应,传递两个数字。你可以使用可选链接(最后一行代码中的 ?.)来仅执行已定义的响应。否则,将使用默认的返回字符串。

结论

编写条件始终是一种品味问题,某些情况将需要不同的方法。但是,我发现当我有几个条件要检查时,对象文字是最易读和最可维护的方式。

来源:

https://betterprogramming.pub/dont-use-if-else-and-switch-in-javascript-use-object-literals-c54578566ba0

图片

(0)

相关推荐

  • Java语言程序设计与数据结构(基础篇)第3章 选择笔记

    文章目录 Java语言程序设计与数据结构(基础篇)第3章 选择笔记 1.常见错误1:忘记必要的括号 2.常见错误2:错误地在if行出现分号 3.常见错误3:对布尔值的冗余测试 4.常见错误4:悬空el ...

  • Java语言基础知识整理汇总

    表达式和运算符: 算术运算符: 元代表多少个操作数,一元表示一个操作数: 一元运算符:++自增(只能是变量),++a等价于a = a+ 1; ++a 与 a++ 有区别: ++a 先自增 在运算 a+ ...

  • JavaScript的简介与语法大合集

    以最新的JavaScript标准为基准.通过简单但足够详细的内容,为你讲解从基础到高阶的JavaScript相关知识. JavaScript简介 让我们来看看JavaScript有什么特别之处,我们可 ...

  • 嵌入式工程师超长经验分享:从单片机coder到嵌入式programer的简单历程

    原创 keer_zu 嵌入式ARM 今天 C语言到底该怎么学,单片机coder怎么才能顺利转型成为嵌入式programer?21ic论坛有一"镇站之宝"的超长经验分享贴,特此分享给 ...

  • 25.JavaScript执行上下文

    JavaScript执行上下文 1.this指向 1).直接调用函数,this指向全局对象 2).在函数外,this指向全局对象 3).通过对象调用或new一个函数,this指向调用的对象或新对象 2 ...

  • Java基础之结构

    Java中程序流程控制语句包括条件结构.循环结构和跳转语句 4.1条件结构 条件结构包括顺序结构和选择结构.顺序结构在程序执行中没有跳转和判断,知道程序结束为止.选择结构包括 if 语句,if-els ...

  • javascript中的闭包这一篇就够了

    前端技术优选 今天 以下文章来源于程序员成长指北 ,作者koala 程序员成长指北专注 Node.js 技术栈分享,从 前端 到 Node.js 再到 后端数据库,祝您成为优秀的高级 Node.js ...

  • 「知识点」JavaScript 中11个有趣的事实

    「知识点」JavaScript 中11个有趣的事实

  • Javascript 中数据类型那些可能会中招的细节

    大迁世界 3月4日 作者:moonshinean https://moonshinean.github.io/blogs 前言 Javascript的数据类型对于大家来说一点都不默认,主要基本数据局类 ...

  • 如何在现代JavaScript中编写异步任务

    前言在本文中,我们将探讨过去异步执行的 JavaScript 的演变,以及它是怎样改变我们编写代码的方式的.我们将从最早的 Web 开发开始,一直到现代异步模式.作为编程语言, JavaScript ...

  • 关于javascript中的promise的用法和注意事项

    一.promise描述 promise是javascript中标准的内置对象,用于表示一个异步操作的最终状态(是失败还是成功完成)及其结果值.它让你能够把异步操作最终成功或者失败的原因和响应的处理程序 ...

  • JavaScript中的AJAX

    XMLHttpRequest对象 IE7 ,FireFox,Chrome,Opera,Safari创建XHR对象 var xhr=new XMLHttpRequest(); 创建XHR对象的兼容性写法 ...

  • JavaScript中的函数

    概念 函数就是封装了一段可被重复调用执行的代码块. 函数的使用分为两步:声明函数和调用函数. 函数声明 function fn() { console.log("hi") } 注意 ...

  • Map与WeakMap类型在JavaScript中的使用

    map类型特点与创建方法: <!DOCTYPE html> <html lang="en"> <head> <meta charset=& ...

  • JavaScript 中的时间处理详解

    JavaScript 中的时间处理详解