《编写可维护的JavaScript》——1.2 语句结尾

1.2 语句结尾

有一件很有意思且很容易让人困惑的事情,那就是JavaScript的语句要么独占一行,要么以分号结尾。类似C的编程语言,诸如C++和Java,都采用这种行结束写法,即结尾使用分号。下面这两段示例代码都是合法的JavaScript。

// 合法的代码
var name = "Nicholas";
function sayName() {
     alert(name);
}
// 合法的代码,但不推荐这样写
var name = "Nicholas"
function sayName() {
     alert(name)
}

有赖于分析器的自动分号插入(Automatic Semicolon Insertion,ASI)机制,JavaScript代码省略分号也是可以正常工作的。ASI 会自动寻找代码中应当使用分号但实际没有分号的位置,并插入分号。大多数场景下ASI都会正确插入分号,不会产生错误。但ASI的分号插入规则非常复杂且很难记住,因此我推荐不要省略分号。看一下这段代码。

// 原始代码
function getData() {
     return
     {
         title: "Maintainable JavaScript",
         author: "Nicholas C. Zakas"
     }
}
// 分析器会将它理解成
function getData() {
     return;
     {
         title: "Maintainable JavaScript",
         author: "Nicholas C. Zakas"
     };
}

在这段代码中,函数getData()的本意是返回一个包含一些数据的对象。然而,return之后新起了一行,导致return后被插入了一个分号,这会导致函数返回值是undefined。可以通过将左花括号移至与return同一行的位置来修复这个问题。

// 这段代码工作正常,尽管没有用分号
function getData() {
     return {
         title: "Maintainable JavaScript",
         author: "Nicholas C. Zakas"
     }
}

ASI在某些场景下是很管用的,特别是,有时候ASI可以帮助减少代码错误。当某个场景我们认为不需要插入分号而ASI认为需要插入时,常常会产生错误。我发现很多开发人员,尤其是新手们,更倾向于使用分号而不是省略它们。

Douglas Crockford针对JavaScript提炼出的编程规范(下文统称为Crockford的编程规范)推荐总是使用分号,同样,jQuery核心风格指南、Google的JavaScript风格指南以及Dojo编程风格指南都推荐不要省略分号。如果省略了分号,JSLint和JSHint默认都会有警告。

时间: 2017-05-02

《编写可维护的JavaScript》——1.2 语句结尾的相关文章

《编写可维护的JavaScript》——第 1 章 基本的格式化1.1 缩进层级

第一部分 编程风格 编写可维护的JavaScript"程序是写给人读的,只是偶尔让计算机执行一下." --Donald Knuth.1 当你刚刚组建一个团队时,团队中的每个人都各自有一套编程习惯.毕竟,每个成员都有着不同的背景.有些人可能来自某个"皮包公司"(one-man shop),身兼数职,在公司里什么事都做:还有些人会来自不同的团队,对某种特定的做事风格情有独钟(或恨之入骨).每个人都觉得代码应当按照自己的想法来写,这些通常被归纳为个人编程嗜好.在这个过程中

《编写可维护的JavaScript》——2.3 使用注释

2.3 使用注释 何时添加注释是程序员经常争论的一个话题.一种通行的指导原则是,当代码不够清晰时添加注释,而当代码很明了时不应当添加注释.比如这个例子中,注释是画蛇添足. // 不好的写法 // 初始化count var count = 10; 因为代码中初始化count的操作是显而易见的.注释并没有提供其他有价值的信息.换个角度讲,如果这个值10具有一些特殊的含义,而且无法直接从代码中看出来,这时就有必要添加注释了. // 好的写法 // 改变这个值可能会让它变成青蛙 var count =

《编写可维护的JavaScript》——第 1 章 基本的格式化 1.1缩进层级

第 1 章 基本的格式化 编程风格指南的核心是基本的格式化规则(formatting rule).这些规则直接决定了如何编写高水准的代码.与在学校学习写字时所用的方格纸类似,基本的格式化规则将指引开发者以特定的风格编写代码.这些规则通常包含一些你不太在意的有关语法的信息,但对于编写清晰连贯的代码段来说,每一条信息都是非常重要的.1.1 缩进层级 关于JavaScript编码风格,我们首先要讨论的是(几乎所有的语言都是如此)如何处理缩进.对这个话题是可以争论上好几个小时的,缩进甚至关系到软件工程师

《编写可维护的JavaScript》——1.7 直接量

1.7 直接量 JavaScript中包含一些类型的原始值:字符串.数字.布尔值.null和undefined.同样也包含对象直接量和数组直接量.这其中,只有布尔值是自解释(self-explanatory)的,其他的类型或多或少都需要思考一下它们如何才能更精确地表示出来. ** 1.7.1 字符串** 在JavaScript中,字符串是独一无二的.字符串可以用双引号括起来,也可以用单引号括起来.比如: // 合法的JavaScript代码 var name = "Nicholas says,

《编写可维护的JavaScript》——2.4 文档注释

2.4 文档注释 从技术的角度讲,文档注释并不是JavaScript的组成部分,但它们是一种普遍的实践.文档注释有很多种格式,但最流行的一种格式来自于JavaDoc文档格式:多行注释以单斜线加双星号(/**)开始,接下来是描述信息,其中使用@符号来表示一个或多个属性.来看一段来自YUI的源码的例子. /** 返回一个对象,这个对象包含被提供对象的所有属性. 后一个对象的属性会覆盖前一个对象的属性. 传入一个单独的对象,会创建一个它的浅拷贝(shallow copy). 如果需要深拷贝(deep

《编写可维护的JavaScript》——1.6 命名

1.6 命名 "计算机科学只存在两个难题:缓存失效和命名."-Phil Karlton. 只要是写代码,都会涉及变量和函数,因此变量和函数命名对于增强代码可读性至关重要.JavaScript语言的核心ECMAScript,即是遵照了驼峰式大小写(Camel case)1命名法.驼峰式大小写(Camel Case)命名法是由小写字母开始的,后续每个单词首字母都大写,比如: var thisIsMyName; var anotherVariable; var aVeryLongVariab

《编写可维护的JavaScript》——第 2 章 注释 2.1单行注释

第 2 章 注释 注释是代码中最常见的组成部分.它们是另一种形式的文档,也是程序员最后才舍得花时间去写的.但是,对于代码的总体可维护性而言,注释是非常重要的一环.打开一个没有任何注释的文件就好像趣味冒险,但如果给你的时间有限,这项任务就变成了折磨.适度的添加注释可以解释说明代码的来龙去脉,其他开发者就可以不用从头开始读代码,而是直接去读代码的任意部分.编程风格通常不会包含对注释的风格约定,但我认为从注释的作用即可看出它们的重要性不容忽视. JavaScript支持两种不同类型的注释:单行注释和多

《编写可维护的JavaScript》——第 2 章 注释2.1 单行注释

第 2 章 注释 注释是代码中最常见的组成部分.它们是另一种形式的文档,也是程序员最后才舍得花时间去写的.但是,对于代码的总体可维护性而言,注释是非常重要的一环.打开一个没有任何注释的文件就好像趣味冒险,但如果给你的时间有限,这项任务就变成了折磨.适度的添加注释可以解释说明代码的来龙去脉,其他开发者就可以不用从头开始读代码,而是直接去读代码的任意部分.编程风格通常不会包含对注释的风格约定,但我认为从注释的作用即可看出它们的重要性不容忽视. JavaScript支持两种不同类型的注释:单行注释和多

《编写可维护的JavaScript》——1.5 空行

1.5 空行 在编程规范中,空行是常常被忽略的一个方面.通常来讲,代码看起来应当像一系列可读的段落,而不是一大段揉在一起的连续文本.有时一段代码的语义和另一段代码不相关,这时就应该使用空行将它们分隔,确保语义有关联的代码展现在一起.我们可以为1.1节里的示例代码加入一些空行,以更好地提升代码的可读性,下面是最初的代码: if (wl && wl.length) { for (i = 0, l = wl.length; i < l; ++i) { p = wl[i]; type = Y