如何让你的JavaScript代码更加语义化

如何让你的JavaScript代码更加语义化

语义化这个词在 HTML 中用的比较多,即根据内容的结构化选择合适的标签。其作用不容小觑:

  • 赋予标签含义,让代码结构更加清晰,虽然我们可以在标签上添加 class 来标识,但这种通过属性来表示本体的形式会显得不够直接,而且在一定程度上也有冗余。
  • 优化搜索引擎(SEO),结构良好的网页对搜索引擎的亲和力是很高的,百度和 google 也给出了很多网页结构化的建议(规范),方便他们抓取网页。
  • 利于设备解析,如盲人阅读器对页面的分析,目前淘宝很多网页都是支持盲人阅读的,这种体验上的优化得利于网页的良好结构和语义化表达。
  • 便于开发者维护,在参加工作之前,很多程序员都是单人开发模式,单人开发无所谓代码结构,自己看得懂就差不多了,一旦走向工作岗位,会发现,以前的鄙习有点让自己捉襟见肘了。

W3C Group 工作组在 web 规范上持续贡献,他们的目标也是期望整个互联网的发展态势稳定统一起来。不扯远了,回到本文需要阐述的重点:如何语义化 JavaScript 代码?

一、先看看那些不易读懂的 JavaScript 代码

1. 判断


  1. // 数据类型判断
  2. if(Object.prototype.toString.call(str) === “[object String]”){
  3. // doSomething();
  4. };
  5.  
  6. // 文件类型判断
  7. if(/.*\.css(?=\?|$)/.test(“/path/to/main.css”)){
  8. // doSomething();
  9. }

2. 清空一个队列


  1. var Queue = ["test1", "test2", "test3"];
  2. // 常见方式
  3. Queue.length = 0;
  4. Queue = [];

3. 注册一个变量


  1. // 注册
  2. var repos = {};
  3.  
  4. repos[“a”] = {
  5. name: “a”,
  6. content: {}
  7. };
  8.  
  9. repos[“b”] = {
  10. name: “b”,
  11. content: {}
  12. };

上面几个例子倒不至于看不懂,程序都特别简单,第一个例子中,我们通过 Object 原型链上的 toString 方法来判断一个变量是否为 string 类型,以及使用正则来判断一个文件是不是 css 文件。代码写起来比较轻松,倘若我们同时需要判断多个对象是否为多个类型中的一种呢?再比如我们需要在一串代码中提取 require 依赖关系呢,是否应该思考下如何组织自己的代码?

在第二个例子中,将数组的长度设置为 0,或者使用空数组来重置这个变量,都是十分常见的方式,但目前的场景是清空一个队列,我们是否可以使用更加语义化的形式来呈现?比如我们只需要清空该队列的前五个和后三个 item 呢?

第三个例子中,变量的注册,把一堆注册放在一起,上面的形式确实也是一目了然,如果 a b c d 等都是分隔穿插在几百行代码之间呢?突然来个 repos["x"] 这样是否显得有些不太直观。

为了说明本文所倡导的思想,上面的几个解释都有些含糊和牵强,请往下看。

二、提高代码语义性

针对上述三个案例,用更加语义化的方式来呈现代码:

1. 语义化变量


  1. // 类型判断
  2. function isType(type){
  3. return function(o){
  4. return Object.prototype.toString.call(o) === '[object ' + type + ']';
  5. }
  6. }
  7.  
  8. var isString = isType(“String”);
  9. var isObject = isType("Object");
  10. var isArray = isType("Array");
  11. isString("I'm Barret Lee.");
  12. isArray([1,2,3]);
  13. isObject({});

我觉得不需要太多的解释,对比


  1. if(Object.prototype.toString.call(str) === “[object String]”){
  2. // code here...
  3. }

显得清新多了吧。


  1. // 提取常量
  2. var isCss = /.*\.css(?=\?|$)/;
  3. isCss.test(“/path/to/main.css”);

不管 isCss 这个正则代码有多长,当我们看到 isCss 这个单词就可以顾名思义。很多人写正则都不会将正则单独提取出来使用某个有意义的变量去存储,加注释还好,要是不加注释,后续开发者就只能硬着头皮看懂正则去理解代码的含义。

这样的处理,实际上是增加了代码量,不过从工程角度去审视,有助于提高开发效率以及代码的组织性。

2. 语义化行为


  1. var Queue = ["test1", "test2", "test3"];
  2. Queue.splice(0, Queue.length);

上面代码具有很强的语义性,从索引为 0 的地方开始,直到队列最后,删除 Queue 中所有的 item。这种写法的扩展性也更好:


  1. Queue.splice(2, 4); // 删除从索引为 2,往后的 4 个元素

这只是个小例子,有些行为是需要很多代码组合处理的,如果没有很好的组合同一行为的代码,整个结构就显得十分涣散,不利于阅读。


  1. // 注册
  2. var repos = [];
  3.  
  4. function register(o){
  5. repos[o.name] = o;
  6. }
  7.  
  8. register({
  9. name: “a”,
  10. content: {}
  11. });

对比我们之前


  1. repos[“a”] = {
  2. name: “a”,
  3. content: {}
  4. };

语义化程度是不是有所提高~

三、小结

代码的优化,需要考虑的维度很多。但是代码的优化并不是减少代码量,有的时候我们需要增加代码来提高代码的可阅读性。

  • 正确标记变量
  • 封装某个动作
  • 注意函数的写法
  • 不容易理解的东西,加注释

本文为抛砖引玉,希望可以触发你对代码优化的敏感度的思考,写出一手别人竖拇指的代码~

原文发布时间:2014-08-27

本文来自云栖合作伙伴“linux中国”

时间: 2024-09-29 08:23:44

如何让你的JavaScript代码更加语义化的相关文章

jquery下组织javascript代码(js函数化)_基础知识

从神奇的"$"函数开始 "$"函数将在文档加载完成之后为一个指定的button 绑定事件,这些代码在单个网页中工作正常.但是如果我们还有其它的网页,我们将不得不重复这个过程. 复制代码 代码如下: <a href="javascript:;" id="sayHello">Say Hello</a> <script type="text/javascript"> //whe

网页的HTML结构进行重构:语义化标签的意义

文章简介:语义化标签的实战意义. 我收集到一些观点,大家姑且先听上一听,有人说:"没必要考虑语义化,只要我写的代码浏览器运行后没问题就行,反正领导根本不关心这些""语义化是w3c推广的,我是很想语义化我的代码,但总是用不明白""这个不好说,语义化再好有啥用,关键是有好的项目,客户才是金主!""除了专业人士,谁会去看我们的代码是不是语义化的" 不仅仅有页面重构人员的声音,也听一听工程师.设计师.还有项目管理人员,他们是怎么看&q

javascript比较语义化版本号的实现代码_javascript技巧

前言 所谓"语义化版本号",就是在版本号中体现出语义,或者说版本号本身是有意义的,不再是随意给的一个数字.这个规范将版本号中每个数字的意义都做了比较严格的说明.当然,其中大部分内容还是沿用我们之前说过的业内的约定,所以,对于有版本号意识的开发者来说,接受这个规范是很容易的. 在移动端APP第三方开发中经常会碰到一些因为版本不同而造成JS SDK或JS API差异或支持的问题.对于移动前端来说,在实际第三方开发中可能会需要根据APP的版本号做一些特殊的业务逻辑处理. 语义化版本号 一般语

JavaScript 代码规范

所有的 JavaScript 项目适用同一种规范 设计原则: 1.原子思想:即每个function就做一件事: 2.归纳思想:将同一类的操作,全部整合到一起: 3.方便维护:可以便于后来人进行快速维护: 4.方便拓展:即可以根据每个不同的项目进行不同的更改: 5.通用前端设计模式:一些前端可以通用的设计模式 6.注意写好注释,将注释写的具体点: JavaScript 代码规范 代码规范通常包括以下几个方面: 变量和函数的命名规则 空格,缩进,注释的使用规则 其他常用规范-- 规范的代码可以更易于

编写更加稳定、可读性强的JavaScript代码

每个人都有自己的编程风 格,也无可避免的要去感受别人的编程风格--修改别人的代码."修改别人的代码"对于我们来说的一件很痛苦的事情.因为有些代码并不是那么容易阅读.可维 护的,让另一个人来修改别人的代码,或许最终只会修改一个变量,调整一个函数的调用时机,却需要花上1个小时甚至更多的时间来阅读.缕清别人的代码.本文 一步步带你重构一段获取位置的"组件"--提升你的javascript代码的可读性和稳定性. 本文内容如下: 分离你的javascript代码 函数不应该过

JS实现完全语义化的网页选项卡效果代码_javascript技巧

本文实例讲述了JS实现完全语义化的网页选项卡效果代码.分享给大家供大家参考.具体如下: 这是一款完全语义化的JS网页选项卡,包括了两种用法,一种是点击式,另一种是滑动门式,具体用哪一种要根据你自己的需要了,滑动门是在鼠标经过时触发,选项卡则是需要鼠标点击的. 运行效果截图如下: 在线演示地址如下: http://demo.jb51.net/js/2015/js-yyh-web-tab-cha-nav-codes/ 具体代码如下: <!DOCTYPE html PUBLIC "-//W3C/

推荐10 个短小却超实用的 JavaScript 代码段(http://www.jianshu.com/p/3ef822ec5a63)

文章转自<http://www.jianshu.com/p/3ef822ec5a63>,感谢作者分享! 推荐10 个短小却超实用的 JavaScript 代码段 字数2018 阅读4777 评论8 喜欢203 JavaScript正变得越来越流行,它已经成为前端开发的第一选择,并且利用基于JavaScript语言的NodeJS,我们也可以开发出高性能的后端服务,甚至我还看到在硬件编程领域也出现了JavaScript的身影.JavaScript正在逐渐进化为一门全能的开发语言. 但用好JavaS

for层次-用javascript代码写出来,怎么写

问题描述 用javascript代码写出来,怎么写 解决方案 html中的javascript代码怎么写javascript 写的tab页代码写javascript代码的技巧 解决方案二: alert(* ** ** * ); 解决方案三: alert(* ** ** * ); 解决方案四: alert确实可以,但是太土了,而且是个弹窗啊 这个题是考你for循环的使用,每次打出几个*** 算是一个算法吧,这个你可以搜一下,三角形代码输出算法,然后改一下输出行数和*的个数就可以了!! 解决方案五:

JavaScript代码教程:惰性载入函数

文章简介:因为浏览器之间行为的差异,多数JavaScript代码包含了大量的if语句,将执行引导到正确的代码中.看看XMLHttpRequest(XHR)对象中的createXHR()函数. 因为浏览器之间行为的差异,多数JavaScript代码包含了大量的if语句,将执行引导到正确的代码中.看看XMLHttpRequest(XHR)对象中的createXHR()函数: function createXHR() { if (typeof XMLHttpRequest != "undefined&