实例:消除魔术字符串

魔术字符串指的是,在代码之中多次出现、与代码形成强耦合的某一个具体的字符串或者数值。风格良好的代码,应该尽量消除魔术字符串,改由含义清晰的变量代替。

  1. function getArea(shape, options) {
  2. let area = 0;
  3. switch (shape) {
  4. case 'Triangle': // 魔术字符串
  5. area = .5 * options.width * options.height;
  6. break;
  7. /* ... more code ... */
  8. }
  9. return area;
  10. }
  11. getArea('Triangle', { width: 100, height: 100 }); // 魔术字符串

上面代码中,字符串Triangle就是一个魔术字符串。它多次出现,与代码形成“强耦合”,不利于将来的修改和维护。

常用的消除魔术字符串的方法,就是把它写成一个变量。

  1. const shapeType = {
  2. triangle: 'Triangle'
  3. };
  4. function getArea(shape, options) {
  5. let area = 0;
  6. switch (shape) {
  7. case shapeType.triangle:
  8. area = .5 * options.width * options.height;
  9. break;
  10. }
  11. return area;
  12. }
  13. getArea(shapeType.triangle, { width: 100, height: 100 });

上面代码中,我们把Triangle写成shapeType对象的triangle属性,这样就消除了强耦合。

如果仔细分析,可以发现shapeType.triangle等于哪个值并不重要,只要确保不会跟其他shapeType属性的值冲突即可。因此,这里就很适合改用 Symbol 值。

  1. const shapeType = {
  2. triangle: Symbol()
  3. };

上面代码中,除了将shapeType.triangle的值设为一个 Symbol,其他地方都不用修改。

es6 实例:消除魔术字符串相关推荐

  1. [JavaScript]什么是魔术字符串?

    在读 ECMAScript 6 入门这本书时,看到一个术语叫做"魔术字符串". 其中对"魔术字符串"的诠释是: 魔术字符串指的是,在代码之中多次出现.与代码形成 ...

  2. 石川es6课程---8、字符串

    石川es6课程---8.字符串 一.总结 一句话总结: · es6字符串新增两个方法:startsWith(以什么开头),endsWith(以什么结尾) · 新增反单引号:可以解析变量,可以折行:le ...

  3. ES6学习(模板字符串)

    模板字符串 传统的JavaScript语言,输出模板通常是这样写的. const name = 'Jack'; const age = 18; const sentence = name + ' is ...

  4. es6字符串添加html标签,JavaScript_详解JavaScript ES6中的模板字符串,在 ES6 中引入了一种新的字符 - phpStudy...

    详解JavaScript ES6中的模板字符串 在 ES6 中引入了一种新的字符串字面量 - 模板字符串,除了使用反引号 (`) 表示,它们看上去和普通的字符串没有什么区别.在最简单的情况下,他们就是 ...

  5. ES6新特性之字符串扩展

    字符串扩展 在ES6中,为字符串扩展了几个新的API: includes() :返回布尔值,表示是否找到了参数字符串. startsWith() :返回布尔值,表示参数字符串是否在原字符串的头部. e ...

  6. ES6新功能-模板字符串

    ES6新功能-模板字符串 VS 传统JS字符串拼接

  7. [译]JavaScript:ES6中的模板字符串简介

    原文:http://tc39wiki.calculist.org/es6/template-strings/ ES6中的模板字符串(template string)是一种能在字符串文本中内嵌表达式的字 ...

  8. ES6(二)——字符串模板、标签模板字符串、函数的默认参数、剩余参数、数组对象的展开语法、数值的表示、Symbol

    一.字符串模板基本使用 在ES6之前,如果我们想要将字符串和一些动态的变量(标识符)拼接到一起,是非常麻烦和丑陋的(ugly). ES6允许我们使用字符串模板来嵌入JS的变量或者表达式来进行拼接: 首 ...

  9. js模板字符串自定义类名_详解JavaScript ES6中的模板字符串

    这篇文章主要介绍了详解JavaScript ES6中的模板字符串,JS的ES6版本带来诸多简洁化方面的重大改进,需要的朋友可以参考下 在 ES6 中引入了一种新的字符串字面量 - 模板字符串,除了使用 ...

最新文章

  1. UI设计培训分享:UI设计师如何准备面试?
  2. 机器学习集成学习与模型融合!
  3. mysql 服务器监控系列-黄杉 mysqldba
  4. 非Java程序员转行Java-day01-入门基础
  5. 写在开年:移植wolfssl4.3.0到w60x_sdk_3.04时的一点问题
  6. 黑色背景下,将照片内封闭空心图案的空心区域染成Cyan并保存
  7. VMware vRealize Operations Manager SSRF漏洞(CVE-2021-21975、SSRF)
  8. Introduction-To-Signal-Processingorfanidis-i2sp
  9. 小米9首次官方降价:2799元,依旧实力强劲
  10. 详述欺骗性断言如何引发严重的 Windows 内核漏洞 (CVE-2020-0792)
  11. 异常处理与调试 - 零基础入门学习Delphi50
  12. git 还原某个文件到特定版本
  13. 如何修改Maven本地仓库位置
  14. 前端页面崩溃现象处理
  15. pytorch例子学习——NEURAL TRANSFER USING PYTORCH神经迁移
  16. windows下Python安装pymysql
  17. STM32玩转物联网实战篇:01.网络通信前准备
  18. 苹果中国官网全面更新,官翻产品不容错过!
  19. R语言线性判别分析(LDA),二次判别分析(QDA)和正则判别分析(RDA)
  20. C语言函数大全--c开头的函数之复数篇

热门文章

  1. html符号实体----介绍
  2. topshelf和quartz内部分享
  3. C#学习笔记之-----倒序输出字符串
  4. 虚拟机网卡无法启动获取ip地址
  5. Composition-based Multi-Relational Graph Convolutional Networks 多关系图神经网络 ICLR 2020
  6. 宝藏世界显示连接不到服务器,宝藏世界新手常见问题解答 新手攻略
  7. 个推开发者服务进阶之路
  8. FortiGate双链路不同运营商上网配置
  9. 设计模式之-简单工厂模式
  10. keepalived nginx 双机热备图文讲解