JavaScript 编码规范指南:命名、布局、注释与性能优化

作者:极速慢跑时间:2026-10-26 18:57:38浏览:124

本文详细阐述了 JavaScript 编码规范,涵盖变量与函数的命名约定、代码布局与缩进标准、注释编写原则、基础语法规范以及性能优化技巧。通过遵循这些规范,开发者可以编写出更易读、易维护且高效的 JavaScript 代码,避免常见陷阱并提升团队协作效率。

一、命名

JavaScript 命名规范

首先,变量和函数的命名应当准确反映其含义,避免随意或模糊的命名方式。


对于非构造函数,建议采用驼峰命名法,并尽量使用动宾结构,以便与变量名区分,例如 getName 或 IsFull。而构造函数(即自定义类型)的首字母应大写,以区别于非构造函数,例如 Person。


变量同样采用驼峰命名法。鉴于 JavaScript 是弱类型语言,建议在变量名前添加类型前缀:整形用 i,浮点数用 f,布尔型用 b,字符串用 s,数组用 a。这并非强制要求,可根据个人偏好选择,但一旦选定风格,应保持统一,避免混用加前缀和不加前缀的方式。



二、布局

代码布局与缩进

代码布局方面,空格的使用至关重要。


在声明变量时,var 关键字与变量名之间、变量名与等号之间、等号与初始值之间各保留一个空格,而初始值与分号之间不留空格。例如:var i = 10;。


使用字面量方式声明引用类型变量时,属性名与冒号之间不留空格,冒号与初始值之间保留一个空格。例如:


代码如下:

 
var Person = {
age: 16,
name: "Sam"
}; 

函数定义时,function 关键字与函数名之间保留一个空格,函数名与括号之间不留空格,括号与左大括号之间保留一个空格。


函数的各个参数之间应保留一个空格。


if、while、for 等关键字与左括号之间应保留一个空格,以强调关键字;而 switch、with 等关键字与左括号之间不留空格。


二元操作符与其左右操作数之间应保留一个空格。若代码行较长,可不留空格。


换行处理上,


每条语句应独占一行,避免将多个语句写在同一行。


if、while、for 等块级作用域后的左大括号 { 不应另起一行,而应与关键字放在同一行。


缩进方面,


推荐使用 4 个空格进行缩进,避免使用 Tab 键。


当作用域发生变化时,应进行缩进以清晰显示代码的层次关系。



三、注释

注释编写原则

注释应合理添加,既不能缺失,也不宜过多。只需对重要的方法、变量和算法(或需注意的问题)添加注释即可。


修改源代码时,必须同步更新相关注释,确保代码与注释的一致性。


避免在代码中使用 HTML 风格的注释。



四、规范

基础语法规范

声明变量时必须使用 var 关键字。虽然 JavaScript 允许省略 var,但这会导致变量成为全局变量,从而引发潜在问题。


声明变量时应同时初始化,且之后最好不再改变变量的数据类型。


语句末尾的分号是必须的,不可省略。


即使 if、while、for 等控制语句仅包含一条语句,也必须将其包裹在大括号内。


尽量避免使用全局变量。若必须使用,建议整个应用中只保留一个全局变量。


JavaScript 与 HTML、CSS 之间应保持松散耦合。HTML 负责数据层,CSS 负责表现层,JavaScript 负责行为层,三者应避免紧密耦合,否则会增加后期维护难度。HTML 中不应包含具体的 JavaScript 代码,而应采用外部文件引入方式;JavaScript 中也应尽量避免使用 innerHTML 插入大量 HTML 元素,建议将元素预先放置在 HTML 中并初始隐藏;JavaScript 中不应直接修改 CSS 的具体属性,而应通过 className 间接修改。


不要修改非自己拥有的对象,不为其实例或原型添加属性或方法,也不要重复定义其已有方法。否则,当该对象的新版本添加同名属性或方法时,可能导致难以察觉的问题。解决方案包括继承或包含两种模式。


使用命名空间来防止多个库之间的冲突,可参考 YUI 库的组织方式。


对于代码中出现的字面量,应将其封装在某个变量的属性中,属性名首字母或全部字母大写(模拟其他语言中的 define 或 enum)。例如:


代码如下:

 
var Color = {
RED: 1,
BLUE: 2,
GREEN: 3
}; 

对函数传入的参数进行检查。若为基本类型,使用 typeof;若为引用类型,使用 instanceof;若要检查某个对象是否包含某个方法,则对该方法使用 typeof 操作符,并与字符串 "undefined" 进行比较。



五、性能

性能优化技巧

避免全局查找。使用全局变量和函数的开销大于局部变量和函数,因为全局变量涉及作用域链的查找。若函数中多次使用全局变量,会导致多次作用域链查找。为避免此问题,可将多次使用的全局变量赋值给一个局部变量,后续均使用该局部变量。


避免使用 with 语句。with 语句会创建自己的作用域,从而导致额外开销。


避免属性查找。属性查找是一个 O(n) 操作,对象上的任何属性查找都比访问变量和数组花费更多时间(访问变量和数组是 O(1) 操作)。因此,若多次用到同一属性,应将其保存在局部变量中。例如:


代码如下:

 
var sUrl = window.location.href;
var sData = sUrl.substring(sUrl.indexOf("?"));
作者最新文章