本文深入解析JavaScript的语法核心与代码结构规范,涵盖功能性、可读性、空白处理、括号使用、分号规则、缩进标准及标识符命名约定。通过具体代码示例说明语法错误对脚本执行的影响,并介绍提升代码可读性的常见风格指南,帮助开发者编写更规范、易维护的JavaScript代码。
概述
任何编程语言要正常运行都必须遵循特定的规则体系,这套定义语言正确结构的规则集合被称为语法。尽管不同编程语言之间存在差异,但它们大多由具有相似概念且带有语法变体的部分组成。
本教程旨在详细阐述JavaScript中诸多语法规则与代码结构的约定。
功能性与可读性
在初学JavaScript时,关注语法主要出于两个核心考量:确保代码的功能性以及提升代码的可读性。
部分语法规则是JavaScript实现其功能所必需的硬性要求。若未遵循这些规则,控制台将抛出错误,导致脚本停止执行。
以经典的“Hello, World!”程序为例,若存在语法错误:
// Example of a broken JavaScript program
console.log("Hello, World!"
上述代码示例因缺失右括号,未能按预期在控制台打印“Hello, World!”,而是触发了以下错误信息:
Uncaught SyntaxError: missing ) after argument list
必须在脚本继续执行前补全缺失的右括号“)”。此例展示了JavaScript语法错误如何导致脚本崩溃,强调了遵循正确语法以运行代码的必要性。
JavaScript语法与格式的部分方面源于不同的编程思想流派。这意味着某些风格规则或选择并非强制性,运行代码时不会引发错误。然而,遵循许多常见约定仍具价值,因为这样能使不同项目和代码库的开发人员更熟悉该风格,从而提升可读性。
参考以下三个变量赋值的示例:
const greeting="Hello"; // no whitespace between variable & string
const greeting = "Hello"; // excessive whitespace after assignment
const greeting = "Hello"; // single whitespace between variable & string
尽管上述三个示例在输出结果上功能完全一致,但第三个选项 `greeting = "Hello";` 是迄今为止最常用且可读性最高的代码编写方式,尤其在大型程序的语境下。
在整个编码项目中保持风格一致至关重要。不同组织可能采用不同的指导方针,因此开发者需具备灵活性以适应各种规范。
下文将介绍若干代码示例,旨在帮助您熟悉JavaScript代码的语法与结构,并在有疑问时供参考。
空白
JavaScript中的空白字符包括空格、制表符和换行符(即按下ENTER键)。如前所述,JavaScript会忽略字符串外部的多余空格以及运算符和其他符号之间的空格。这意味着以下三个变量赋值示例将产生完全相同的计算输出:
const userLocation = "New York City, " + "NY";
const userLocation="New York City, "+"NY";
const userLocation = "New York City, " + "NY";
无论采用上述哪种样式编写脚本,`userLocation` 都将代表“New York City, NY”,且空格是使用制表符还是空格均不会对JavaScript产生影响。
一个良好的经验法则是遵循与数学和语言语法相同的空白约定。
这种风格的一个显著例外出现在分配多个变量的过程中。请注意以下示例中 `=` 的位置:
const companyName = "DigitalOcean";
const companyHeadquarters = "New York City";
const companyHandle = "digitalocean";
所有赋值运算符(`=`)均排成一行,且变量后留有空间。这种组织结构并非每个代码库都采用,但可用于提高可读性。
JavaScript会忽略多余的换行符。通常,会在注释上方和代码块之后插入额外的换行符以增强可读性。
括弧
对于 `if`、`switch` 和 `for` 等关键字,通常在括号前后添加空格。请观察下面的比较和循环示例:
// An example of if statement syntax
if () { }
// Check math equation and print a string to the console
if (4 < 5) {
console.log("4 is less than 5.");
}
// An example of
for loop syntaxfor () { }
// Iterate 10 times, printing out each iteration number to the console
for (let i = 0; i <= 10; i++) {
console.log(i);
}
`if` 语句和 `for` 循环在括号的每一侧都有空格(但括号内部无空格)。
当代码属于函数、方法或类时,括号将紧贴相应的名称。
// An example
functionfunction functionName() {}
// Initialize a function to calculate the volume of a cube
function cube(number) {
return Math.pow(number, 3);
}
// Invoke the function
cube(5);
在上面的示例中,`cube()` 是一个函数,括号 `()` 对将包含参数或实参。在此情况下,参数分别为数字或5。尽管带有额外空间的 `cube ( )` 是有效的(因为代码将按预期执行),但几乎看不到这种写法。将它们放在一起有助于轻松地将函数名与括号对以及任何关联的传递参数关联起来。
分号
JavaScript程序由一系列称为语句的指令组成,正如书面段落由一系列句子组成一样。虽然句子以句点结尾,但JavaScript语句通常以分号(`;`)结尾。
// A single JavaScript statement
const now = new Date();
如果两个或多个语句相邻,则必须用分号分隔它们。
// Get the current timestamp and print it to the console
const now = new Date(); console.log(now);
如果语句由换行符分隔,则分号是可选的。
// Two statements separated by newlines
const now = new Date()
console.log(now)
一种安全而通用的约定是用分号分隔语句,而不考虑换行符。一般来说,包含分号以降低出错的可能性被认为是良好的做法。
// Two statements separated by newlines and semicolons
const now = new Date();
console.log(now);
在 `for` 循环的初始化、条件和增量或减量之间也需要分号。
for (initialization; condition; increment) {
// run the loop
}
分号不包括在任何类型的块语句之后,例如 `if`、`for`、`do`、`while`、`class`、`switch` 和 `function`。这些块语句包含在大括号中。请注意下面的示例:
// Initialize a function to calculate the area of a square
function square(number) {
return Math.pow(number, 2);
}
// Calculate the area of a number greater than 0
if (number > 0) {
square(number);
}
注意,并非所有用大括号括起来的代码都以分号结尾。对象用大括号括起来,并以分号结尾。
// An example object
const objectName = {};
// Initialize triangle object
const triangle = {
type: "right",
angle: 90,
sides: 3,
};
在除了块语句之外的每个JavaScript语句之后包含分号是广为接受的做法,这些语句以大括号结尾。
缩进
从技术上讲,完整的JavaScript程序可以在一行中编写。但是,这很快就会变得非常难以阅读和维护。相反,我们使用换行符和缩进。
下面是一个条件 `if/else` 语句的例子,它要么写在一行上,要么用换行符和缩进:
// Conditional statement written on one line
if (x === 1) { /* execute code if true */ } else { /* execute code if false */ }
// Conditional statement with indentation
if (x === 1) {
// execute code if true
}else {
// execute code if false
}
请注意,块中包含的任何代码都是缩进的。缩进可以用两个空格、四个空格或按制表符来完成。选项卡或空格的使用取决于您的个人偏好(对于单独项目)或组织的指导方针(对于协作项目)。
像上面的例子一样,在第一行末尾包括左大括号是构造JavaScript块语句和对象的常规方法。您可能看到块语句编写的另一种方式是在它们自己的行上使用大括号。
// Conditional statement with braces on newlines
if (x === 1){
// execute code if true
}else{
// execute code if false
}
这种风格在JavaScript中不像在其他语言中那样常见,但并非闻所未闻。
任何嵌套的block语句都将进一步缩进。
// Initialize a functionfunction isEqualToOne(x) {
// Check if x is equal to one
if (x === 1) { // on success, return true
return true;
} else { return false;
}
}
正确的代码缩进对于保持可读性和减少混乱是必不可少的。要记住这个规则的一个例外是,压缩的库将删除不必要的字符,因此呈现较小的文件大小以加快页面加载时间(如jquery.min.js和d3.min.js)。
身份标识
变量、函数或属性的名称在JavaScript中称为标识符。标识符由字母和数字组成,但不能包含$和u之外的任何符号,也不能以数字开头。
区分大小写
这些名称区分大小写。以下两个示例 `myvariable` 和 `myVariable` 将引用两个不同的变量:
var myVariable = 1;
var myvariable = 2;
JavaScript名称的惯例是用camelcase(小驼峰式)编写,这意味着第一个单词是小写的,但后面的每个单词都以大写字母开头。您还可以看到用大写字母书写的全局变量或常量,用下划线分隔。
const INSURANCE_RATE = 0.4;
这个规则的例外是类名,它通常是以大写字母(PascalCase)开头的每个单词编写的。
// Initialize a class
class ExampleClass {
constructor() { }
}
为了确保代码可读,最好在程序文件中使用明显不同的标识符。
保留关键字
标识符也不能由任何保留关键字组成。关键字是JavaScript语言中具有内置功能的单词,如 `var`、`if`、`for` 和 `this`。
例如,您不能将值赋给名为 `var` 的变量。
var var = "Some value";
由于JavaScript理解 `var` 为关键字,因此会导致语法错误:
SyntaxError: Unexpected token (1:4)
以上就是深入理解JavaScript中的语法和代码结构的详细内容,更多关于JavaScript中的语法和结构的资料请关注本站其它相关文章!