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

简介: Douglas Crockford针对JavaScript提炼出的编程规范(下文统称为Crockford的编程规范)推荐总是使用分号,同样,jQuery核心风格指南、Google的JavaScript风格指南以及Dojo编程风格指南都推荐不要省略分号。

本节书摘来自异步社区《编写可维护的JavaScript》一书中的第1章,第1.2节,作者:【美】Nicholas C. Zakas著,更多章节内容可以访问云栖社区“异步社区”公众号查看

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默认都会有警告。

相关文章
|
JavaScript 前端开发
JavaScript的break和continue语句的使用和区别
JavaScript的break和continue语句的使用和区别 JavaScript中break 和 continue都是用来控制循环结构,即用在for循环和while循环中。区别在于: break 语句用于跳出循环。 continue 用于跳过循环中的一个迭代。 1.break语句 break语句会终止循环并且跳出循环 for(var j=0;j<5;j++){ if(j==3){ break; } console.log(j);//0 1 2 }
|
JavaScript 前端开发
JavaScript的流程控制之if条件语句和switch选择语句(一)
JavaScript的流程控制(一) 接下来我么来讲一下JavaScript的流程控制,JavaScript中的流程控制主要包括条件语句和循环语句。这篇博客主要讲条件语句。说到条件语句主要包括if条件语句和switch选择语句两种。 1.if语句 //语法: // if(判断的条件){ // 条件成立时的执行代码 // } //if语句当条件不成立时,不执行任何的代码 var oDate=new Date(); console.log(oDate.getDay()); if(oDate.getDay()==6){
|
JavaScript 前端开发 Shell
开发中切忌使用的JavaScript语句 —— with语句 和 eval语句
开发中切忌使用的JavaScript语句 —— with语句 和 eval语句
109 0
|
JavaScript 前端开发 容器
前端(JavaScript)------运算符及分支语句、循环语句
先判断一个表达式的布尔值,然后根据布尔值的真伪,执行不同的语句。
75 0
|
JavaScript 前端开发
JavaScript入门之分支语句
引入 我们知道,当今世界丰富多彩的代码世界如果用语句来区分的话,不外乎三种: 顺序语句 分支语句 循环语句 正是这简简单单的三类控制语句,构成了花样繁多的程序世界。
|
前端开发 JavaScript
初学JavaScript&输出语句
前端三大件分别为:HTML、CSS、JavaScript。其中最重要的当属JavaScript。 虽然现在开发通常使用框架,但是这些基础的才最重要的,就像一座高楼不能没有稳固的地基一样。打好基础,走遍天下都不怕。JavaScript(简称“JS”) 是一种具有函数优先的轻量级,解释型或即时编译型的编程语言。 即JavaScript 是一种编程语言,主要参与构建 Web 前端应用。
初学JavaScript&输出语句
|
SQL JavaScript 前端开发
如何用 JavaScript 编写你的第一个单元测试
测试代码是确保代码稳定的第一步。能做到这一点的最佳方法之一就是使用单元测试....
如何用 JavaScript 编写你的第一个单元测试
|
前端开发 JavaScript
Web前端开发笔记——第四章 JavaScript程序设计 第四节 条件语句和循环语句
Web前端开发笔记——第四章 JavaScript程序设计 第四节 条件语句和循环语句
Web前端开发笔记——第四章 JavaScript程序设计 第四节 条件语句和循环语句
|
JavaScript 前端开发
精讲 JavaScript 的 "switch" 语句
精讲 JavaScript 的 "switch" 语句
105 0
|
JavaScript 前端开发
JavaScript 代码结构:语句、分号和注释
JavaScript 代码结构:语句、分号和注释
140 0
JavaScript 代码结构:语句、分号和注释