《编写可维护的JavaScript》读书笔记(一)

第一章主要讲的是编程风格部分的基本格式化。

一个严格按照一定规范来编写的项目,无论从可读性,可维护性,或者运行性能上来说,都是比无规范项目更胜一筹的。

基本的格式化包含以下几种:

1.缩进层级

  良好的缩进能让多位开发人员更快的读懂代码,提高工作效率。

  至于如何缩进,其实并没有一个统一的共识,但是在空格缩进和制表符缩进中,我主张制表符缩进,原因很简单:按钮数少。

2.语句结尾

  说到语句结尾,其实在javascript中最常见的就是加不加分号,什么时候加分号的问题。

  依赖于js分析器的自动分号插入(ASI)机制,javascript的代码省略分号也是可以正常工作的。但是,建议如果没特殊情况,分号还是不要省略,就像下面这段代码:

  

//原始代码
function getData() {
    return
    {
        title:‘java‘,
        author:‘zwr‘
    }
}

//分析器会将它理解成
function getData() {
    return;
    {
        title:‘java‘,
        author:‘zwr‘
    };
}        

  在代码中,函数getData()的本意是返回一个包含数据的对象。然而,return之后起了一行,导致return被插入一个分号,导致函数返回值是undefined。

  当然,正常情况下我们都会让左花括号和return处于同一行,这样就不会有上面的问题。但是不排除有些不太正常的做法,为避免以上情况发生,建议加分号。

3.行的长度

  总的来说,也借鉴了其他编程语言,javascript的一行长度最好在80个字符以内。

4.换行与空行

  当一行长度达到了单行最大字符数限制时,就需要手动将一行拆成两行。通常我们会在运算符后换行,下一行会增加两个层级的缩进。换行位置也有一定的讲究,因为ASI机制会在某些场景下在行结束的位置插入分号。总是将一个运算符置于行尾,ASI就不会自作主张地插入分号,也就避免了错误的发生。如下示例:

//好的做法,在运算符后换行,第二行追加两个缩进
callFunction(document, element, window, "something",
        navigator);
//不好的做法,在运算符之前就换行了
callFunction(document, element, window, "something"
        ,navigator);

  至于空行,一般出现在:方法之间、方法中的局部变量和第一条语句之间、多行或者单行注释之前,总而言之,适当的使用空行可以提高代码可读性。

5.命名

  只要是写代码,都会涉及变量和函数,因此变量和函数命名对于增强代码可读性至关重要。在JavaScript中,命名一般遵照驼峰式大小写命名法。驼峰式大小写命名法是由小写字母开始,后续每个单词首字母都大写。命名不仅是一门科学,更是一门技术,但通常来讲,命名长度应该尽量短,并抓住要点。同时,变量和函数的命名还需要区分开来。变量命名前缀应当是名词,以名词为前缀可以让变量和函数区分开来,因为函数名的前缀应当是动词。尽量在变量名中体现出值的数据类型。比如,命名count、length等可以表明数据类型是数字,而命名name、titile等可以表明数据类型是字符串。

  常量的命名一般是用大写字母和下划线来命名,下划线以分隔单词,比如:

var MAX_COUNT = 10;

  构造函数的命名采用大驼峰命名法来命名,比如:

function Person(name) {
    this.name = name;
}
var me = new Person("名字");

6.直接量

  JavaScript中包含一些类型的原始值:字符串、数字、布尔值、null和undefined。同样也包含对象直接量和数组直接量。

//整数
var count = 10;

//小数
var price = 10.0;
var price = 10.00;

//不推荐的小数写法:没有小数部分或者整数部分
var price = 10.;
var price = .1;

  null是一个特殊值,但我们有不少时间会将它和undefined搞混。理解null最好的方式是将它当作对象的占位符。

  而undefined也是一个特殊值,其中一个让人困惑的地方时在于null === undefined 结果居然是true。然而,这两个值用途却不相同。那些没有被初始化的变量(一般是只被声明)都有一个初始值,即undefined,表示这个变量等待被赋值。

  因为undefined常常和返回“undefined”的typeof运算符混淆,所以代码中尽量避免使用undefined。如下:

//不好的写法
var person;
console.log(person === undefined); //true

//好的写法,在当person是对象时;
var person = null;
console.log(person === null); //true

  对象直接量是创建对象的一种做法,即:

//不好的写法 先显式创建Object实例再添加属性
var book = new Object();
book.title = "title";

//好的写法 对象直接量写法
var book = {
    title: "title"
}

  数组直接量写法和对象直接量写法类似,同样推荐。

原文地址:https://www.cnblogs.com/zhangweirui/p/8128082.html

时间: 2024-08-01 11:06:32

《编写可维护的JavaScript》读书笔记(一)的相关文章

高性能javascript读书笔记(三.DOM 编程1)

第三章DOM Script DOM编程 读书笔记 访问和修改DOM元素 浏览器通常要求DOM实现和JavaScript保持相互独立. <!-- 例如IE中,被称为JScript的JavaScript实现位于库文件jscript.dll中,而DOM实现位于另一个库mshtml.dll(内 部代号Trident).这种分离技术允许其他技术和语言,如VBScript,受益于Trident所提供的DOM功能和渲染功能.Safari使用Webkit的WebCore处理DOM和渲染,具有一个分离的JavaS

数据访问---高性能JavaScript读书笔记(2)

对于任何一种编程语言来说,数据存储的位置关系到访问速度! 在JavaScript中的直接量包括字符串string.数字number.布尔值boolean.对象object.数组array.函数function.正则表达式regular expression.空值null.未定义数组undefined.而数组项则需要通过数组的数字索引来访问,对象通过字符串进行索引来访问其成员(这里顺便提一句因为数组项是通过数字进行索引.对象成员是通过字符串进行索引,所以这也就是为什么访问对象成员比访问数组项更慢的

加载和运行---高性能JavaScript读书笔记(1)

众所周知大多数浏览器是使用单进程处理UI更新和JavaScript运行等多个任务的,而同一时间只能有一个任务被执行,如此说来,JavaScript运行了多长时间就意味着用户得等待浏览器响应需要花多久时间. 从认知上来说,解析器解析一个界面的时候都是从上至下依次解析的,这就是说界面上出现多少个<script>标签(不管是内联还是外部文件),页面下载和解析必须停止等待脚本下载完成并运行完成(注意这里包括运行),这个过程当中,页面解析和用户交互是被完全阻塞的. Javascript第一条定律:将脚本

DOM访问---高性能JavaScript读书笔记(3)

在JavaScript高级程序设计第一章当中就把JavaScript分成三大部分 所以事实上DOM和BOM是两在独立的部分,它们之间的通信是通过相互之间的功能接口来实现的,这样说来两个独立的部分以功能接口必定会带来性能损耗.这也就是为什么大家一致都说尽量少去访问和修改DOM元素(注意我这里说的是访问和修改,为什么包括访问,请继续往下看  哈哈). 下面用一张图来说明它们各自的作用. 1.在修改DOM元素的时候,我们应该尽量使用innerHTML而不是CreateElement再AppendChi

高性能javascript读书笔记(三.DOM 编程2)

重绘和重排版 浏览器下载完所有的HTML标记,Javascript,CSS,图片之后,它解析文件并创建两个内部数据结构 DOM树 表示页面结构渲染树 表示DOM节点如何显示 渲染树中为每个需要显示的DOM树木=节点存放至少一个节点(隐藏DOM元素在选桉树中没有对应节点)渲染树上的节点称为"框"或者"盒",符合CSS模型的定义,将页面元素看作一个具有填充,边距,边框和位置的盒.一 旦DOM树和渲染树构造完毕,浏览器就可以显示(绘制)页面上的元素了. 当DOM改变影响到

Javascript读书笔记:函数定义和函数调用

定义函数 使用function关键字来定义函数,分为两种形式: 声明式函数定义: function add(m,n) { alert(m+n); } 这种方式等同于构造一个Function类的实例的方式: var add = new Function("m", "n", "alert(m+n);"); Function类构造方法的最后一个参数为函数体:"alert(m+n);",前面的都是函数的形参,参数必须是字符串形式的:&

Javascript读书笔记:字符串常用方法

concat() 连接多个字符串,返回合并后的字符串. 1 var s1="a"; 2 var s2="b"; 3 var s3="c"; 4 5 console.log(s1.concat(s2,s3));//abc 数组中的concat():将参数添加为数组的元素,返回新的数组. 1 var arr = [1, 2, 3]; 2 console.log(arr.concat(4, 5));//[1,2,3,4,5] indexOf() 查找子

高性能javascript学习笔记系列(1) -js的加载和执行

这篇笔记的内容主要涉及js的脚本位置,如何加载js脚本和脚本文件执行的问题,按照自己的理解结合高性能JavaScript整理出来的 javascript是解释性代码,解释性代码需要经历转化成计算机指令的过程,这个过程就会带来一定的性能损耗,所以在js中做性能的优化是必须的 javascript的阻塞特性:浏览器在执行js代码的时候,不能做其他的任何事情,因为浏览器使用单一的进程来处理用户界面的刷新和javascript的脚本执行,也就是说什么时候执行js脚本影响着用户对页面的使用体验(之所以js

高性能javascript学习笔记系列(6) -ajax

参考 高性能javascript javascript高级程序设计 ajax基础  ajax技术的核心是XMLHttpRequest对象(XHR),通过XHR我们就可以实现无需刷新页面就能从服务器端读取数据 var xhr = new XMLHttpRequest(); //只支持IE7以及更高的版本 xhr.onreadystatechange = function() { if(xhr.readyState == 4) { if( (xhr.status >= 200 && xh

高性能javascript学习笔记系列(5) -快速响应的用户界面

参考高性能javascript 理解浏览器UI线程  用于执行javascript和更新用户界面的进程通常被称为浏览器UI线程  UI线程的工作机制可以理解为一个简单的队列系统,队列中的任务按顺序执行 <button onclick="handleClick()">click</button> <script type="text/javascript"> function handleClick() { var div = do