推荐的JavaScript编码规范

阅读 247 评论 0 喜欢 0
作为前端开发人员,我相信每一个人都或多或少的用到原生的JavaScript,也正是因为用的人多,导致编码风格也是多种多样的,而不规范的编码风格,不仅会导致一些奇怪的问题出现,而且不利于后期维护和提高执行效率。

 
基于本人也在开发中因为规范而出现各种问题,我特意的整理了一下JavaScript编码规范(并不强制,只是推荐)。
 
1、变量
声明变量必须加上var关键字,而且每个var只声明一个变量,增加可读写。
推荐:

var name = 'TG';

var sex = 'man';

不推荐:

var name = 'TG', sex = 'man';

 
原因:当声明变量没有加上var时,变量就会暴露在全局上下文中,不仅很容易造成变量冲突,而且造成全局污染。
 
2、常量
常量的命名方式:用大写字符,并用下划线分隔。永远不要使用const关键词。

var MY_NAME = 'TG';

 
原因:IE并不支持const
 
3、分号
总是使用分号
 
在《JavaScript学习笔记整理(1):词法结构》一文有提到缺少分号的坏处
 
4、嵌套函数
可以使用,可以减少重复代码,隐藏帮助函数等好处
 
5、块内函数声明
不要在块内声明一个函数
 
不推荐:

if(a){

function foo(){}

}

推荐:

if(a){

var foo = function(){}

}

 
6、异常处理
可以使用

try{}catch(e){}

throw exception

 
7、eval()
只用于解析序列化串
 
原因:eval()会让程序执行的比较混乱。
 
8、with(){}
尽量少用。
 

9、缩进

用4个空格作为一缩进,而不是使用tab

原因:因为在不同浏览器上,tab的长度不一。

10、字符串过长截取

每行代码不超过80个字符。如代码过长,可使用+运算符拼接。

原因:过长会导致需要拖动横向滚动条才看得到后面的代码,降低开发效率,而且在复制黏贴时有可能错漏。

11、大括号

区块起首的大括号,不要另起一行

推荐:

if (true) {

}

不推荐:

if (true)

{

}

原因:JavaScript会自动添加句末的分号,容易导致一些奇怪的错误。

12、构造函数

对于构造函数,命名采用首字母大写,其他函数一律小写。

原因:可读性,区分构造函数和普通函数

13、注释

合理的加上注释,有利于后期维护,提高可读性。

14、{}和[]

使用{}代替new Object(),使用[]代替new Array()

15、单引号(')

尽量使用单引号('),只在JSON文件中使用双引号。

16、变量和函数声明

变量名和函数名在JavaScript机制下会发生声明提升(也就是会提前到顶部声明),所以建议变量和函数应该在使用前声明。

在《JavaScript学习笔记整理(2):类型、值和变量》一文中有提到声明提升

17、使用===和!==代替==和!=

在JavaScript中,比较运算符进行计算时会进行强制转换,==和!=会产生一些意想不到的结果,所以应该用“严格相等”===。

18、换行

在语句块和下一个语句之间留一个空行,提高可读性。

19、命名

构造函数或类名使用驼峰式命名

20、嵌入规则

JavaScript程序应该尽量放在.js的文件中。

21、命名规则

JavaScript 中的标识符的命名规则:

  • 以字母、下划线'_'或美元符号'$'开头
  • 允许名称中包含字母,数字,下划线'_'和美元符号'$'
  • 区分大小写

变量、属性和函数名应该用驼峰式:

var isLogin = false;

私有函数用下划线开头:

function getFirstName(){

function _getName(){}

}

构造函数和类名应该首字母大写。

对象中私有变量和函数以下划线开头。

22、语句

对于复合语句,if, for, while, do, switch, try … catch 等代码体,函数定义的函数体,对象的定义等都需要放在花括号'{}'里面。

  • '{' 应在行末,标志代码块的开始。
  • '}' 应在一行开头,标志代码块的结束,同时需要和'{'所在行的开始对齐,以表明一个完整的复合语句段。这样可以极大地提高代码的可阅读性,控制逻辑能清晰地表现出来。
  • 被包含的代码段应该再缩进 4 个空格。
  • 即使被包含的代码段只有一句,也应该用花括号'{}'包含。尽管不用花括号代码也不会错,但如若需要增加语句的话,则较容易因花括号遗漏而引起的编译错误或逻辑错误。

return语句在使用时也需注意,如果用表达式的执行作为返回值,应该把表达式和 return 放在同一行中,以免换行符被误解析为语句的结束而引起返回错误。return 关键字后若没有返回表达式,则返回 undefined。构造器的默认返回值为 this。

return a + b;

23、方法链(调用链)

如果使用方法链,应该每行只调用一个方法:

Animal

.getName()

.getFirstName()

24、使用三元运算符

三元运算符不应该用在一行,应该分割成多行替代。

推荐:

var foo = (a === b)

? 1

: 2;

不推荐:

var foo = (a === b) ?1 : 2;

25、逗号

对于数组和对象不要使用多余的“,”

不推荐:

var arr = [1,2,]

var person = {

name: 'TG'

};

原因:IE不兼容

26、for-in

对于数组,尽量避免使用for-in

JavaScript语法规范的更多相关文章

  1. JSLint检测Javascript语法规范

    前端javascript代码编写中,有一个不错的工具叫JSLint,可以检查代码规范化,压缩JS,CSS等,但是他的语法规范检查个人觉得太“苛刻”了,会提示各种各样的问题修改建议,有时候提示的信息我们 ...

  2. javascript 语法规范错误提示代码

    “Missing semicolon.” : “缺少分号.”, “Use the function form of \”use strict\”.” : “使用标准化定义function.”, “Un ...

  3. javascript语法规范和良好的变成习惯

    1.1空白和多行书写 1.空白:空格键输入的空白.tab键输入的空白以及回车键输入的空白 2.多行书写,不能将引号内的字符串放到两行,不然容易报错. 1.2点语法 . 点语法表达式由对象开始,接着是一 ...

  4. JavaScript 中语法规范及调试

    JavaScript 中语法规范及调试 版权声明:未经博主授权,内容严禁分享转载 JavaScript 开发环境 JavaScript 脚本可以使用任意一款纯文本编辑器进行编程开发. 常见的前端开发编 ...

  5. web前端(14)—— JavaScript的数据类型,语法规范1

    编辑器选择 对js的编辑器选用,有很多,能对html编辑的,也能对js编辑,比如notepad++,visual studio code,webstom,atom,pycharm,sublime te ...

  6. Javascript模块化规范

    Javascript模块化规范 一.前端js模块化由来与演变 CommonJS 原来叫 ServerJS,推出 Modules/1.0 规范后,在 Node.js 等环境下取得了很不错的实践.09年下 ...

  7. 谈谈javascript语法里一些难点问题(一)

    1)    引子 前不久我建立的技术群里一位MM问了一个这样的问题,她贴出的代码如下所示: var a = 1; function hehe() { window.alert(a); var a = ...

  8. 【转发】网易邮箱前端技术分享之javascript编码规范

    网易邮箱前端技术分享之javascript编码规范 发布日期:2013-11-26 10:06 来源:网易邮箱前端技术中心 作者:网易邮箱 点击:533 网易邮箱是国内最早使用ajax技术的邮箱.早在 ...

  9. 网易前端JavaScript编码规范

    在多年开发邮箱webmail过程中,网易邮箱前端团队积累了不少心得体会,我们开发了很多基础js库,实现了大量前端效果组件,开发了成熟的opoa框架以及api组件,在此向大家做一些分享.今天想先和大家聊 ...

随机推荐

  1. How To Restart timer service on all servers in farm

    [array]$servers= Get-SPServer | ? {$_.Role -eq "Application"} $farm = Get-SPFarm foreach ( ...

  2. 谈谈AppDelegate

    谈谈AppDelegate 前言 每个iOS程序都会有一个AppDelegate的类,这个类就是一个代理类,我们新建一个Project的时候,里面都会带有这个类.现在就让我们看看这个类. 开始介绍 对 ...

  3. DP优化与换零钱问题

    1 当贪心不再起效的时候 对于换零钱问题,最简单也是性能最好的方法就是贪心算法.可是贪心算法一定要满足面值相邻两个零钱至少为二倍关系的前提条件.例如1,2,5,10,20……这样的零钱组应用贪心最简单 ...

  4. EntityFramework 数据库连接可用代码动态设定

    摘自:http://blog.csdn.net/dyllove98/article/details/9289553 数据库生成位置可控制(其实主要就是DbContext的构造函数) 1.使用DbCon ...

  5. 数据仓库之启用cdc

    准备工作: 先将sqlservere 代理服务启动 USE [MyDB]; GO EXECUTE sys.sp_cdc_enable_db; --启用数据库对CDC的支持 GO -- 设置别名 @ca ...

  6. Java借助axis2发布WebService

    Webservice: 1.Xml: 2.WSDL: Web service描述语言(WSDL)就是这样一个基于XML(标准通用标记语言下的一个子集)的语言,用于描述Web service及其函数.参 ...

  7. 从AdventureWorks学习数据库建模——保留历史数据

    在业务需求中,经常需要我们在系统中能够记录历史信息,能够查看到历史变动情况,这时我们可以通过增加开始结束时间字段来记录数据的历史版本.对数据的历史记录主要分为:关系.属性历史,实体历史和变更历史. 关 ...

  8. W3School-CSS 表格实例

    CSS 表格实例 CSS 实例 CSS 背景实例 CSS 文本实例 CSS 字体(font)实例 CSS 边框(border)实例 CSS 外边距 (margin) 实例 CSS 内边距 (paddi ...

  9. android sqlite select,update,delete语法

    String sql = "update recentsongtab set usetime=? , strdatetime=? where songid=?";//修改的SQL语 ...

  10. css3实现3D立体翻转效果

    1.在IE下无法显示翻转效果,火狐和谷歌可以 /*样式css*/ .nav-menu li { display: inline; } .nav-menu li a { color: #fff; dis ...