注:感谢Douglas Crockford对javascript做出的贡献,本文主要翻译自他的文章,原文链接:
http://javascript.crockford.com/code.html
本文主要是列出编写JavaScript代码的好的规范--Code Conventions.
-- 这些都不是JavaScript强制要求的.但是一种好的编码风格会让读你写的代码的人感到很舒服.
1.JavaScript File
JavaScript代码尽量单独保存在一个文件里,文件以.js命名.JavaScript代码尽量不要写在HTML里,写在HTML里会增加HTML页面的大小,而且这些JS不能被缓存和压缩.为了不影响HTML的加载时间可以把引用javascript的<script></script>放在HTML的最后,在</body>后.
2.缩进(Indentation)
缩进是4个字符.一般用tab键也行.不过tab键4个字符并不是被标准的,可能在不同的地方,不同的平台里会有不同的表现.
3.行的长度(Line Length)
一般来说一行的长度最好不要超过80个字符,太长了并不利益阅读.如果一行代码太长了,就另起一行.理想的是在逗号后面另起一行.操作符也行.下一行的缩进是8个字符.
4.备注(Comments)
备注要保持up-to-date.不对的过期的备注还不如不备注,会导致阅读的时候带来更大的误解.一般一行简单的代码都是不需要备注的.只有当代码相对比较复杂了,或者做了某件事情不是很明显的时候,加上备注会提升阅读的质量.
5.变量的声明(Variable Declaration)
所有的变量在使用之前都必须声明,变量的声明只能通过var.不加var的"变量"其实是全局对象(global object)的一个属性.(变量不能被delete,对象的属性可以通过delete操作符delete).
最好的最优雅的写法是每个变量都有他自己单独的一行.按照字母顺序排序,并且变量的声明能在top of the function.全局变量尽量避免使用.
6.函数声明(Function Declaration)
所有的函数都必须在使用之前定义.Inner function应该在var statement之后,这样可以很明白的确定当前scope有哪些变量.
函数名和参数的左边括号"("之间不应该有空格,参数的有括号")"和"{"之间应该有一个空格.函数体内的code应该遵循缩进的规则.最后的"}"应该和声明函数的function齐平.
function outer(a, b) {
var e = a * b;
function inner(c, d) {
return (e * c) + d;
}
return inner(0, 1);
}
对于把函数需要立刻执行的情况,整个被引用的表达式应该都被()包围着,这样就能很明确的表达这个表达式的结果是函数的返回值而不是函数本身.
var collection = (function () {
var keys = [], values = [];
return {
get: function (key) {
var at = keys.indexOf(key);
if (at >= 0) {
return values[at];
}
},
set: function (key, value) {
var at = keys.indexOf(key);
if (at < 0) {
at = keys.length;
}
keys[at] = key;
values[at] = value;
},
remove: function (key) {
var at = keys.indexOf(key);
if (at >= 0) {
keys.splice(at, 1);
values.splice(at, 1);
}
}
};
}());
7.命名(Name)
name应该由26个小写的or大写的字符(a-z, A-Z),10位数字(0-9),还有"_"组成.不要用"_"做第一个字符,因为一般来说以"_"开头意味着这个变量是私有的,但是javascript并没有私有的属性这个概念.如果要用私有的就用私有成员属性,并且用特权函数访问这些属性.基本上所有的函数和变量都以小写的字符开头.
8.表达式(statement)
单一的表达式的必须要;结尾,如果不写javascript也会默认加上;
组合的表达式.组合表达式是{....}表示的表达式.
.表达式内部遵照惯用的缩进策略.
.{(左边的大括号)必须在将成为表达式的行的最后.
.}(右边的大括号)必须另起一行,并且和{对齐.
return statement,应该只有值,不要用()包围值,另外如果返回的是个表达式,记住千万要保持表达式和return在同一行,分行的话会导致错误,javascript会默认加上";" 组合表达式的话保证 {和return在同一行.
if statement:
if (condition) {
statements
}
if (condition) {
statements
} else {
statements
}
if (condition) {
statements
} else if (condition) {
statements
} else {
statements
}
for statement:
for (initialization; condition; update) {
statements
}
for (variable in object) {
if (filter) {
statements
}
}
while statement:
while (condition) {
statements
}
do statement:
do {
statements
} while (condition);
switch statement:
switch (expression) {
case expression:
statements
default:
statements
}
case保持和switch对齐
try statement:
try {
statements
} catch (variable) {
statements
}
try {
statements
} catch (variable) {
statements
} finally {
statements
}
尽量避免使用continue,他会改变函数的控制流程.
10.空格(Whitespace)
空白的行能使逻辑相关的代码在一个范围呢,这样有助于提高阅读性.
空格应该按照下面列出来的方面使用:
.关键字和"("之间应该有一个空格.
.调用函数的时候不要加空格.
.所有的二进制操作符除了"." and "(" and "["都要在操作数前加空格.
.所有的单元操作符都不要加空格.
.在for的控制部分依次按照";"顺序加上空格.
.每个,后面都要有空格.
额外建议
.尽量少用new,创建对象的时候用{}代替new object(),创建数组的时候用[]代替new Array()
.如果成员的名字是连续的数字用arrays,如果成员的名字任意string或integer用objects.
.javscript没有block scope.只有function scope.
.不要在if或者while的控制部分进行赋值操作:
if (a = b) {
.尽量使用===和!==进行比较,如果只进行类型比较的话组合typeof和==.
.不要在+操作符后面使用+和++,这样做会造成很打的困扰,如果必须加就在他们之间加上().
total = subtotal + +myInput.value;
is better written as
total = subtotal + (+myInput.value);
eval is
Evil
eval has aliases. Do not use the Function constructor. Do not pass strings to setTimeout or setInterval.
分享到:
相关推荐
python学习资源
jfinal-undertow 用于开发、部署由 jfinal 开发的 web 项目
基于Andorid的音乐播放器项目设计(国外开源)实现源码,主要针对计算机相关专业的正在做毕设的学生和需要项目实战练习的学习者,也可作为课程设计、期末大作业。
python学习资源
python学习资源
python学习一些项目和资源
【毕业设计】java-springboot+vue家具销售平台实现源码(完整前后端+mysql+说明文档+LunW).zip
HTML+CSS+JavaScarip开发的前端网页源代码
python学习资源
【毕业设计】java-springboot-vue健身房信息管理系统源码(完整前后端+mysql+说明文档+LunW).zip
成绩管理系统C/Go。大学生期末小作业,指针实现,C语言版本(ANSI C)和Go语言版本
1_基于大数据的智能菜品个性化推荐与点餐系统的设计与实现.docx
【毕业设计】java-springboot-vue交流互动平台实现源码(完整前后端+mysql+说明文档+LunW).zip
内容概要:本文主要探讨了在高并发情况下如何设计并优化火车票秒杀系统,确保系统的高性能与稳定性。通过对比分析三种库存管理模式(下单减库存、支付减库存、预扣库存),强调了预扣库存结合本地缓存及远程Redis统一库存的优势,同时介绍了如何利用Nginx的加权轮询策略、MQ消息队列异步处理等方式降低系统压力,保障交易完整性和数据一致性,防止超卖现象。 适用人群:具有一定互联网应用开发经验的研发人员和技术管理人员。 使用场景及目标:适用于电商、票务等行业需要处理大量瞬时并发请求的业务场景。其目标在于通过合理的架构规划,实现在高峰期保持平台的稳定运行,保证用户体验的同时最大化销售额。 其他说明:文中提及的技术细节如Epoll I/O多路复用模型以及分布式系统中的容错措施等内容,对于深入理解大规模并发系统的构建有着重要指导意义。
基于 OpenCV 和 PyTorch 的深度车牌识别
【毕业设计-java】springboot-vue教学资料管理系统实现源码(完整前后端+mysql+说明文档+LunW).zip
此数据集包含有关出租车行程的详细信息,包括乘客人数、行程距离、付款类型、车费金额和行程时长。它可用于各种数据分析和机器学习应用程序,例如票价预测和乘车模式分析。
把代码放到Word中,通过开发工具——Visual Basic——插入模块,粘贴在里在,把在硅基流动中申请的API放到VBA代码中。在Word中,选择一个问题,运行这个DeepSeekV3的宏就可以实现在线问答
【毕业设计】java-springboot+vue机动车号牌管理系统实现源码(完整前后端+mysql+说明文档+LunW).zip
【毕业设计】java-springboot-vue交通管理在线服务系统的开发源码(完整前后端+mysql+说明文档+LunW).zip