iis服务器助手广告广告
返回顶部
首页 > 资讯 > 前端开发 > VUE >为什么不需要在JavaScript使用switch 语句!
  • 939
分享到

为什么不需要在JavaScript使用switch 语句!

2024-04-02 19:04:59 939人浏览 薄情痞子
摘要

本篇文章为大家展示了为什么不需要在javascript使用switch 语句!,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。没有 switch 就没有复杂的代码块s

本篇文章为大家展示了为什么不需要在javascript使用switch 语句!,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。

没有 switch 就没有复杂的代码块

switch很方便:给定一个表达式,我们可以检查它是否与一堆case子句中的其他表达式匹配。考虑以下示例:

const name = "Juliana";  switch (name) {   case "Juliana":     console.log("She's Juliana");     break;   case "Tom":     console.log("She's not Juliana");     break; }

当 name 为**“Juliana”**时,我们将打印一条消息,并立即中断退出该块。在switch函数内部时,直接在 case 块使用  return,就可以省略break。

当没有匹配项时,可以使用 default 选项:

const name = "Kris";  switch (name) {   case "Juliana":     console.log("She's Juliana");     break;   case "Tom":     console.log("She's not Juliana");     break;   default:     console.log("Sorry, no match"); }

switch在 Redux reducers 中也大量使用(尽管Redux Toolkit简化了样板),以避免产生大量的if。考虑以下示例:

const LOGIN_SUCCESS = "LOGIN_SUCCESS"; const LOGIN_FaiLED = "LOGIN_FAILED";  const authState = {   token: "",   error: "", };  function authReducer(state = authState, action) {   switch (action.type) {     case LOGIN_SUCCESS:       return { ...state, token: action.payload };     case LOGIN_FAILED:       return { ...state, error: action.payload };     default:       return state;   } }

这有什么问题吗?几乎没有。但是有没有更好的选择呢?

从 Python 获得的启示

来自 Telmo 的这条  Tweet引起了我的注意。他展示了两种“switch”风格,其中一种非常接近python中的模式。

Python 没有开关,它给我们一个更好的替代方法。首先让我们将代码从 JavaScript 移植到Python:

LOGIN_SUCCESS = "LOGIN_SUCCESS" LOGIN_FAILED = "LOGIN_FAILED"  auth_state = {"token": "", "error": ""}   def auth_reducer(state=auth_state, action={}):     mapping = {         LOGIN_SUCCESS: {**state, "token": action["payload"]},         LOGIN_FAILED: {**state, "error": action["payload"]},     }      return mapping.get(action["type"], state)

在 Python 中,我们可以使用字典来模拟switch 。dict.get() 可以用来表示 switch的 default 语句。

当访问不存在的key时,Python 会触发一个 KeyError 错误:

>>> my_dict = {     "name": "John",      "city": "Rome",      "age": 44     }  >>> my_dict["not_here"]  # Output: KeyError: 'not_here'

.get()方法是一种更安全方法,因为它不会引发错误,并且可以为不存在的key指定默认值:

>>> my_dict = {     "name": "John",      "city": "Rome",      "age": 44     }  >>> my_dict.get("not_here", "not found")  # Output: 'not found'

因此,Pytho n中的这一行:

return mapping.get(action["type"], state)

等价于 JavaScript中的:

function authReducer(state = authState, action) {   ...     default:       return state;   ... }

使用字典的方式替换 switch

再次思考前面的示例:

const LOGIN_SUCCESS = "LOGIN_SUCCESS"; const LOGIN_FAILED = "LOGIN_FAILED";  const authState = {   token: "",   error: "", };  function authReducer(state = authState, action) {   switch (action.type) {     case LOGIN_SUCCESS:       return { ...state, token: action.payload };     case LOGIN_FAILED:       return { ...state, error: action.payload };     default:       return state;   } }

如果不使用 switch 我们可以这样做:

function authReducer(state = authState, action) {   const mapping = {     [LOGIN_SUCCESS]: { ...state, token: action.payload },     [LOGIN_FAILED]: { ...state, error: action.payload }   };    return mapping[action.type] || state; }

这里我们使用 es6 中的计算属性,此处,mapping的属性是根据两个常量即时计算的:LOGIN_SUCCESS 和  LOGIN_FAILED。属性对应的值,我们这里使用的是对象解构,这里 ES9((ECMAScript 2018)) 出来的。

const mapping = {   [LOGIN_SUCCESS]: { ...state, token: action.payload },   [LOGIN_FAILED]: { ...state, error: action.payload } }

你如何看待这种方法?它对 switch 来说可能还能一些限制,但对于 reducer 来说可能是一种更好的方案。

但是,此代码的性能如何?

性能怎么样?

switch 的性能优于字典的写法。我们可以使用下面的事例测试一下:

console.time("sample"); for (let i = 0; i < 2000000; i++) {   const nextState = authReducer(authState, {     type: LOGIN_SUCCESS,     payload: "some_token"   }); } console.timeEnd("sample");

测量它们十次左右,

for t in {1..10}; do node switch.js >> switch.txt;done for t in {1..10}; do node map.js >> map.txt;done

上述内容就是为什么不需要在JavaScript使用switch 语句!,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注编程网VUE频道。

--结束END--

本文标题: 为什么不需要在JavaScript使用switch 语句!

本文链接: https://www.lsjlt.com/news/82397.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 为什么不需要在JavaScript使用switch 语句!
    本篇文章为大家展示了为什么不需要在JavaScript使用switch 语句!,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。没有 switch 就没有复杂的代码块s...
    99+
    2024-04-02
  • 你可能不需要在JavaScript使用switch语句
    目录没有 switch 就没有复杂的代码块从 Python 获得的启示使用字典的方式替换 switch性能怎么样?没有 switch 就没有复杂的代码块 switch很方便:给定一个...
    99+
    2024-04-02
  • 为什么switch case语句在java中需要加入break
    本篇文章为大家展示了为什么switch case语句在java中需要加入break,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。java 中使用switch case语句需要加入break 做了具体...
    99+
    2023-05-31
    java switch case
  • JavaScript Switch语句怎么使用
    JavaScript中的Switch语句用于根据不同的条件执行不同的代码块。以下是Switch语句的使用方法:1. 使用Switch...
    99+
    2023-09-05
    JavaScript
  • Python为什么不支持switch语句
    一、简洁性和可读性 Python的设计哲学之一是代码的简洁性和可读性。引入”switch”语句可能会增加语言的复杂性,并且可以用其他方式更清晰地表达相同的逻辑。Python鼓励使用”if-elif-else”语句来处理多个条件情况,这种方式...
    99+
    2023-10-29
    不支持 语句 Python
  • JavaScript Switch语句如何使用
    这篇文章主要介绍“JavaScript Switch语句如何使用”,在日常操作中,相信很多人在JavaScript Switch语句如何使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望...
    99+
    2024-04-02
  • JavaScript Switch语句的用法是什么
    JavaScript Switch语句用于在多个选项中选择一个执行的代码块。它根据表达式的值,在多个case中选择匹配的一个,并执行...
    99+
    2023-10-11
    JavaScript
  • JavaScript的switch语句如何使用
    这篇文章主要介绍了JavaScript的switch语句如何使用的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇JavaScript的switch语句如何使用文章都会有所收获,下...
    99+
    2024-04-02
  • switch语句有什么用
    这篇文章主要介绍了switch语句有什么用,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。switch语句在一些计算机语言中是保留字,其作用大多情况下是进行判断选择,以C语言来...
    99+
    2023-06-14
  • 使用javascript需不需要安装什么
    这篇文章主要介绍“使用javascript需不需要安装什么”,在日常操作中,相信很多人在使用javascript需不需要安装什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”...
    99+
    2024-04-02
  • 怎么在php中使用switch语句
    本篇文章为大家展示了怎么在php中使用switch语句,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。php是什么语言php,一个嵌套的缩写名称,是英文超级文本预处理语言(PHP:Hypertext ...
    99+
    2023-06-14
  • 为什么不要在using语句中调用WCF服务
    这篇文章主要介绍为什么不要在using语句中调用WCF服务,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!如果你调用WCF服务时,像下面的代码这样在using语句中进行调用,需要注意一个问题。using (C...
    99+
    2023-06-17
  • 怎么在JavaScript中使用switch语句计算指定日期
    今天就跟大家聊聊有关怎么在JavaScript中使用switch语句计算指定日期,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。JavaScript可以做什么1.可以使网页具有交互性,...
    99+
    2023-06-14
  • 为什么不使用If-Else语句
    本篇内容主要讲解“为什么不使用If-Else语句”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“为什么不使用If-Else语句”吧!If-Else语句我们再熟悉不...
    99+
    2024-04-02
  • PHP Switch语句怎么使用
    PHP的Switch语句用于根据不同的条件执行不同的代码块。其基本语法如下:```phpswitch (expression) {c...
    99+
    2023-09-05
    PHP
  • PHP switch语句中不使用break的情况是什么
    这篇文章主要讲解了“PHP switch语句中不使用break的情况是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“PHP switch语句中不使用break的情况是什么”吧!为什么不使...
    99+
    2023-07-05
  • php中Switch语句有什么用
    这篇文章主要为大家展示了“php中Switch语句有什么用”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“php中Switch语句有什么用”这篇文章吧。Switc...
    99+
    2024-04-02
  • Go语言之Switch语句怎么使用
    这篇“Go语言之Switch语句怎么使用”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Go语言之Switch语句怎么使用”文...
    99+
    2023-07-02
  • c语言switch case语句怎么使用
    switch case语句是C语言中的一种流程控制语句,它用于根据不同的条件执行不同的操作。以下是switch case语句的基本语...
    99+
    2023-09-05
    c语言
  • js中的switch语句有什么用
    本篇内容主要讲解“js中的switch语句有什么用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“js中的switch语句有什么用”吧!说明switch语句是一种与if语句密切相关的流控制语句,用...
    99+
    2023-06-20
软考高级职称资格查询
推荐阅读
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作