当前位置: 首页 > news >正文

积分商城网站开发站长平台网站

积分商城网站开发,站长平台网站,网站推广与搜索引擎优化,网络规划是干什么的写点东西《Javascript switch 语句的替代方法》 那么 switch 语句有什么问题? Object Literal 查找的替代方法 将我们学到的东西变成一个实用函数 您需要的一切都在一个地方# [](#javascript-version) Javascript 版本Tyepscript version🌟更多精彩 本文…

写点东西《Javascript switch 语句的替代方法》

  • 那么 switch 语句有什么问题?
  • Object Literal 查找的替代方法
  • 将我们学到的东西变成一个实用函数
  • 您需要的一切都在一个地方# [](#javascript-version) Javascript 版本
  • Tyepscript version
  • 🌟更多精彩

在这里插入图片描述

本文扩展了 Todd Motto 关于用对象字面量替换 switch 语句的想法。这是过时、笨拙且冗长的 switch 语句的一种非常简洁美观的替代方法。在本文的最后,您将获得一个基于 Todd 解决方案的实用程序函数,该函数对开发人员更加友好,因此请坚持到最后!

如果您对技术细节不感兴趣,只想了解实用程序函数,请向下滚动到最后一节(您需要的一切都在一个地方)。

那么 switch 语句有什么问题?

虽然 switch 语句在某些情况下很有用,但许多人认为它不是 Javscript 最适合其用途的设计。它不如其他结构灵活、可读和可维护。

例如,对 switch 语句的主要批评之一是其贯穿行为。如果您忘记在 case 的末尾包含 break 语句,则控制权将贯穿到下一个 case ,从而导致意外行为,如下面的示例所示。这可能会使代码更容易出错且更难维护。

switch (fruit) {case 'apple':console.log('Apple selected');// Missing break statement, falls through to the next casecase 'orange':console.log('Orange selected');break;case 'banana':console.log('Banana selected');break;default:console.log('Unknown fruit');
}

在这个示例中,如果 fruit 为 'apple' ,则 "Apple selected""Orange selected" 都将被记录。

Object Literal 查找的替代方法

switch 语句相比,Object Literal 更灵活、更具表现力。

以下是如何使用它们仅返回 string 值。

const getDate (unit) {var date = {'year': '2024','month': 'January','day': '21','default': 'Default value'};return (date[unit] || date['default']);
}var month = getDate('month');
console.log(month); // January

有时我们需要编写更复杂的代码,而仅返回 string 是不够的。我们可以进一步改进上述代码,在其中使用函数而不是字符串,以便我们可以包含更复杂的代码。

const getDate (unit) {var date = {'year': () => {// do more complicated stuff here// just returning a string in this casereturn '2024';},'month': () => {return 'January';},'day': () => {return '21';},'default': () => {return 'Default value'}};// we return the Object literal's function invokedreturn (date[unit] || date['default'])();
}var month = getDate('month');
console.log(month); // January

但是如果我们想要一个贯穿行为呢?我们可以轻松地使用对象字面量来实现这一点,它更具可读性、声明性和更不易出错。它还不会涉及添加或删除 break ,而这是我们正在寻找的。

const getDayType (day) {const isWeekDay = () => {return 'Weekday';}const isWeekEnd = () => {return 'Weekend';}var days = {'monday': isWeekDay,'tuesday': isWeekDay,'wednesday': isWeekDay,'thursay': isWeekDay,'friday': isWeekDay,'saturday': isWeekEnd,'sunday': isWeekEnd,  'default': () => {return 'Default value'}};// we return the Object literal's function invoked  return (days[day] || days['default'])();
}var dayType = getDayType('sunday');
console.log(dayType); // WeekEnd

将我们学到的东西变成一个实用函数

既然我们已经学会了如何使用 Object Literal 而不是 switch ,那么让我们根据学到的知识构建一个实用函数,以进一步简化我们的生活。

我们称我们的函数为 switchCase 。它接收一个具有 2 个属性的对象: casesdefaultCase 。Cases 是将容纳我们案例的对象字面量,而 defaultCase 是…嗯,默认案例。

const switchCase = ({cases, defaultCase}) {}

switchCase 是一个返回回调函数的高阶函数。回调函数接收 switch 表达式。

const switchCase = ({cases, defaultCase}) {return (expression) => {}
}

现在,回调函数需要做的就是返回调用的对象字面量函数。

const switchCase = ({cases, defaultCase}) {return (expression) => {return (cases[expression] || defaultCase)();}
}

就是这样!现在让我们看一个如何使用它的示例。

let date = new Date()const today = switchCase({cases: {year: () => date.getFullYear(),month: () => date.getMonth() + 1,day: () => date.getDate()},defaultCase: () => date
})today('year') // current year
today('month') // current month
today('day') // current day
today('century') // default case - returns the current date Object

对于 typescript 用户,我们可以利用泛型来允许以后要调用该函数的用户指定他们希望对象字面量函数返回的类型。

type SwitchCase<T> = {cases: {[key: string]: () => T},defaultCase: () => T
} const switchCase = <T,>({cases, defaultCase}: SwitchCase<T>) => {return (expression: string) => {return (cases[expression] || defaultCase)()}
}

这就是我们如何使用它的方式。请注意,我们不必总是指定类型,因为 Typescript 会自动推断它,除非它是多个类型的联合,如下所示。

let date = new Date()const today = switchCase<number | Date>({cases: {year: () => date.getFullYear(),month: () => date.getMonth() + 1,day: () => date.getDate()},defaultCase: () => date
})today('year') // current year
today('month') // current month
today('day') // current day
today('century') // default case - returns the current date Object

您需要的一切都在一个地方# Javascript 版本

实用程序函数:

const switchCase = ({cases, defaultCase}) => (expression) => (cases[expression] || defaultCase)()

用法: Tyepscript 版本

let date = new Date()const today = switchCase({cases: {year: () => date.getFullYear(),month: () => date.getMonth() + 1,day: () => date.getDate()},defaultCase: () => date
})today('year') // current year
today('month') // current month
today('day') // current day
today('century') // default case - returns the current date Object

Tyepscript version

实用功能:

const switchCase = <T,>({cases, defaultCase}: {cases: {[key: string]: () => T}, defaultCase: () => T}) => (expression: string) => (cases[expression] || defaultCase)()

用法:

let date = new Date()const today = switchCase<number | Date>({cases: {year: () => date.getFullYear(),month: () => date.getMonth() + 1,day: () => date.getDate()},defaultCase: () => date
})today('year') // current year
today('month') // current month
today('day') // current day
today('century') // default case - returns the current date Object

🌟更多精彩

点击👉这里~~

http://www.fp688.cn/news/159047.html

相关文章:

  • 网页设计板式重构seo优化工具软件
  • 网站重新备案需要多长时间google play应用商店
  • 常州制作网站软件抖音seo源码搭建
  • 重庆网站建设哪家专业杭州seo技术
  • wordpress前端开发电脑网络优化软件
  • 用wordpress做企业网站竞猜世界杯
  • 网站建设功能需求表数据分析网站
  • 自己电脑做网站好吗游戏推广员如何推广引流
  • 自建免费网站哪个好百度榜
  • 哪个网站可以做公务员考试题千锋教育培训收费一览表
  • 在什么网站上可以做中学数学家教软文写作技巧有哪些
  • 西安做网站排名网站优化+山东
  • wordpress直接密码注册舆情优化公司
  • 做律师网站的网络公司整站seo优化公司
  • 自己做电影网站十大放黄不登录不收费
  • 用织梦做的网站是模板的吗宁波seo推广费用
  • 海淀区网站制作公司平面设计网站
  • 海外广告公司江西seo推广
  • 精选聊城做网站的公司爱站关键词
  • 社交信息共享网站开发外包海南乐秀同城群软件下载
  • 做群头像的网站在线制作电子商务网站建设流程
  • 郑州商城网站建设推广平台软件有哪些
  • 移动端网站开发框架苏州百度 seo
  • 有没有哪种网站推荐一下苏州seo营销
  • 不懂的人做网站用织梦 还是 cmsb站好看的纪录片免费
  • 东营网站建设价钱表seo优化培训
  • 品牌策划咨询设计公司安徽百度seo公司
  • 西安网站建设推广深圳seo公司助力网络营销飞跃
  • 昆明做网站建设方案昆明抖音推广
  • 沈阳微信网站开发微信软文范例