热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

怎样让你的JavaScript代码越发语义化

语义化这个词在HTML顶用的比较多,即依据内容的构造化挑选适宜的标签。其作用不容小觑:给予标签寄义,让代码构造越发清楚,虽然我们能够在标签上增添class来标识,但这类经由过程属性

语义化这个词在 HTML 顶用的比较多,即依据内容的构造化挑选适宜的标签。其作用不容小觑:

  • 给予标签寄义,让代码构造越发清楚,虽然我们能够在标签上增添 class 来标识,但这类经由过程属性来示意本体的情势会显得不够直接,而且在肯定水平上也有冗余。
  • 优化搜索引擎(SEO),构造优越的网页对搜索引擎的亲和力是很高的,百度和 google 也给出了许多网页构造化的发起(范例),轻易他们抓取网页。
  • 利于装备剖析,如瞽者浏览器对页面的剖析,现在淘宝许多网页都是支撑瞽者浏览的,这类体验上的优化得利于网页的优越构造和语义化表达。
  • 便于开辟者保护,在参加工作之前,许多顺序员都是单人开辟形式,单人开辟无所谓代码构造,本身看得懂就差不多了,一旦走向工作岗位,会发明,之前的鄙习有点让本身左支右绌了。

W3C Group 工作组在 web 范例上延续孝敬,他们的目的也是希冀全部互联网的生长态势稳固一致起来。不扯远了,回到本文须要论述的重点:怎样语义化 Javascript 代码?

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

1. 推断

// 数据范例推断
if(Object.prototype.toString.call(str) === “[object String]”){
// doSomething();
};
// 文件范例推断
if(/.*\.css(?=\?|$)/.test(“/path/to/main.css”)){
// doSomething();
}

2. 清空一个行列

var Queue = ["test1", "test2", "test3"];
// 罕见体式格局
Queue.length = 0;
Queue = [];

3. 注册一个变量

// 注册
var repos = {};
repos[“a”] = {
name: “a”,
content: {}
};
repos[“b”] = {
name: “b”,
content: {}
};

上面几个例子倒不至于看不懂,顺序都迥殊简朴,第一个例子中,我们经由过程 Object 原型链上的 toString 方法来推断一个变量是不是为 string 范例,以及运用正则来推断一个文件是不是是 css 文件。代码写起来比较轻松,倘使我们同时须要推断多个对象是不是为多个范例中的一种呢?再比方我们须要在一串代码中提取 require 依靠关联呢,是不是应当思索下怎样构造本身的代码?

在第二个例子中,将数组的长度设置为 0,或许运用空数组来重置这个变量,都是非常罕见的体式格局,但现在的场景是清空一个行列,我们是不是能够运用越发语义化的情势来显现?比方我们只须要清空该行列的前五个和后三个 item 呢?

第三个例子中,变量的注册,把一堆注册放在一同,上面的情势确切也是一览无余,假如 a b c d 等都是分开穿插在几百行代码之间呢?倏忽来个 repos[“x”] 如许是不是显得有些不太直观。

为了申明本文所提倡的头脑,上面的几个诠释都有些暧昧和牵强,请往下看。

二、进步代码语义性

针对上述三个案例,用越发语义化的体式格局来显现代码:

1. 语义化变量

// 范例推断
function isType(type){
return function(o){
return Object.prototype.toString.call(o) === '[object ' + type + ']';
}
}
var isString = isType(“String”);
var isObject = isType("Object");
var isArray = isType("Array");
isString("I'm Barret Lee.");
isArray([1,2,3]);
isObject({});

我以为不须要太多的诠释,对照

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

显得清爽多了吧。

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

不论 isCss 这个正则代码有多长,当我们看到 isCss 这个单词就能够望文生义。许多人写正则都不会将正则零丁提取出来运用某个有意义的变量去存储,加解释还好,如果不加解释,后续开辟者就只能硬着头皮看懂正则去明白代码的寄义。

如许的处置惩罚,实际上是增添了代码量,不过从工程角度去审阅,有助于进步开辟效力以及代码的构造性。

2. 语义化行动

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

上面代码具有很强的语义性,从索引为 0 的处所最先,直到行列末了,删除 Queue 中所有的 item。这类写法的扩展性也更好:

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

这只是个小例子,有些行动是须要许多代码组合处置惩罚的,假如没有很好的组合统一行动的代码,全部构造就显得非常松散,不利于浏览。

// 注册
var repos = [];
function register(o){
repos[o.name] = o;
}
register({
name: “a”,
content: {}
});

对照我们之前

repos[“a”] = {
name: “a”,
content: {}
};

语义化水平是不是是有所进步~

三、小结

代码的优化,须要斟酌的维度许多。然则代码的优化并非削减代码量,有的时刻我们须要增添代码来进步代码的可浏览性。

  • 准确标记变量
  • 封装某个行动
  • 注重函数的写法
  • 不容易明白的东西,加解释

本文为举一反三,愿望能够触发你对代码优化的敏感度的思索,写出一手他人竖拇指的代码~

作者:Barret Lee
出处:http://www.cnblogs.com/hustskyking/


推荐阅读
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • 本文介绍了使用kotlin实现动画效果的方法,包括上下移动、放大缩小、旋转等功能。通过代码示例演示了如何使用ObjectAnimator和AnimatorSet来实现动画效果,并提供了实现抖动效果的代码。同时还介绍了如何使用translationY和translationX来实现上下和左右移动的效果。最后还提供了一个anim_small.xml文件的代码示例,可以用来实现放大缩小的效果。 ... [详细]
  • Nginx使用(server参数配置)
    本文介绍了Nginx的使用,重点讲解了server参数配置,包括端口号、主机名、根目录等内容。同时,还介绍了Nginx的反向代理功能。 ... [详细]
  • 本文介绍了Java工具类库Hutool,该工具包封装了对文件、流、加密解密、转码、正则、线程、XML等JDK方法的封装,并提供了各种Util工具类。同时,还介绍了Hutool的组件,包括动态代理、布隆过滤、缓存、定时任务等功能。该工具包可以简化Java代码,提高开发效率。 ... [详细]
  • Java容器中的compareto方法排序原理解析
    本文从源码解析Java容器中的compareto方法的排序原理,讲解了在使用数组存储数据时的限制以及存储效率的问题。同时提到了Redis的五大数据结构和list、set等知识点,回忆了作者大学时代的Java学习经历。文章以作者做的思维导图作为目录,展示了整个讲解过程。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • 本文介绍了在Mac上搭建php环境后无法使用localhost连接mysql的问题,并通过将localhost替换为127.0.0.1或本机IP解决了该问题。文章解释了localhost和127.0.0.1的区别,指出了使用socket方式连接导致连接失败的原因。此外,还提供了相关链接供读者深入了解。 ... [详细]
  • 本文介绍了闭包的定义和运转机制,重点解释了闭包如何能够接触外部函数的作用域中的变量。通过词法作用域的查找规则,闭包可以访问外部函数的作用域。同时还提到了闭包的作用和影响。 ... [详细]
  • 本文分享了一个关于在C#中使用异步代码的问题,作者在控制台中运行时代码正常工作,但在Windows窗体中却无法正常工作。作者尝试搜索局域网上的主机,但在窗体中计数器没有减少。文章提供了相关的代码和解决思路。 ... [详细]
  • Webpack5内置处理图片资源的配置方法
    本文介绍了在Webpack5中处理图片资源的配置方法。在Webpack4中,我们需要使用file-loader和url-loader来处理图片资源,但是在Webpack5中,这两个Loader的功能已经被内置到Webpack中,我们只需要简单配置即可实现图片资源的处理。本文还介绍了一些常用的配置方法,如匹配不同类型的图片文件、设置输出路径等。通过本文的学习,读者可以快速掌握Webpack5处理图片资源的方法。 ... [详细]
  • 本文介绍了C++中省略号类型和参数个数不确定函数参数的使用方法,并提供了一个范例。通过宏定义的方式,可以方便地处理不定参数的情况。文章中给出了具体的代码实现,并对代码进行了解释和说明。这对于需要处理不定参数的情况的程序员来说,是一个很有用的参考资料。 ... [详细]
  • 本文介绍了使用postman进行接口测试的方法,以测试用户管理模块为例。首先需要下载并安装postman,然后创建基本的请求并填写用户名密码进行登录测试。接下来可以进行用户查询和新增的测试。在新增时,可以进行异常测试,包括用户名超长和输入特殊字符的情况。通过测试发现后台没有对参数长度和特殊字符进行检查和过滤。 ... [详细]
  • 本文介绍了Perl的测试框架Test::Base,它是一个数据驱动的测试框架,可以自动进行单元测试,省去手工编写测试程序的麻烦。与Test::More完全兼容,使用方法简单。以plural函数为例,展示了Test::Base的使用方法。 ... [详细]
  • 1,关于死锁的理解死锁,我们可以简单的理解为是两个线程同时使用同一资源,两个线程又得不到相应的资源而造成永无相互等待的情况。 2,模拟死锁背景介绍:我们创建一个朋友 ... [详细]
  • 本文介绍了高校天文共享平台的开发过程中的思考和规划。该平台旨在为高校学生提供天象预报、科普知识、观测活动、图片分享等功能。文章分析了项目的技术栈选择、网站前端布局、业务流程、数据库结构等方面,并总结了项目存在的问题,如前后端未分离、代码混乱等。作者表示希望通过记录和规划,能够理清思路,进一步完善该平台。 ... [详细]
author-avatar
无为小妮子_373
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有