实例:消除魔术字符串

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

  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. 小学计算机笔记,小学信息技术教师读书笔记
  2. identifier starts immediately after numeric literal
  3. C语言——程序的编译+链接(linux+gcc实现过程)
  4. oracle12c完全卸载工具_oracle完全卸载方法
  5. 如何在Eclipse里显示BPMN格式的流程图
  6. 5g与edge ai_使用OpenVINO部署AI Edge应用
  7. php header会重定向吗,php – 可以依靠header()重定向来结束程序流吗?
  8. 201571030316/201571030314 《小学四则运算练习软件需求说明》结对项目报告
  9. C++|STL学习笔记-对STL中关联容器map的进一步认识
  10. 【Flink】 producer attempted to use a producer id which is not currently assigned to its transaction
  11. Eclipse安装aptana
  12. winfrom datagridview中DataGridViewTextBoxColumn的联动处理
  13. 推荐《与孩子一起学编程》,与孩子一起开启pathon编程之路吧
  14. 基于Java gui的超市管理系统
  15. matlab用平方法怎么求传递闭包矩阵,逐次平方法计算传递闭包
  16. 激励视频广告 Android,腾讯社交联盟广告
  17. Xenu软件检查网站死链接
  18. 零基础入门金融风控之贷款违约预测—特征工程
  19. Matlab中的两种除法
  20. SpringApplication.run(MyApplication.class, args)运行流程源码分析

热门文章

  1. 《开源硬件创客——15个酷应用玩转树莓派》——第1章 初识树莓派
  2. eclipse中SSH三大框架环境搭建二
  3. Percona-tookit学习笔记(一)
  4. 你真会用setTimeout吗?
  5. Java 信号 Semaphore 简介
  6. 关于软件开发本质和开发方法的一些文章的读后感
  7. ActiveRecord 模式杂谈
  8. PHP微信公众平台源码 支持多账号 仿pigcms 小猪微信 已经修改完毕 完整可用
  9. mysqldump备份还原
  10. JAR包命令解压以及再命令打包