1.使用4个空格为缩进层级.(或者按tab制表符键)
2.不要省略分号
3.将一行长度限定为80个字符,超出则换行(在运算符后换行,下一行增加两个层级的缩进)
4.适当增加空行,提高可读性.比如:方法之间,多行或单行注释之前,在方法内的逻辑片段之间插入空行。
5.命名:遵循驼峰大小写命名法。变量以名词命名,方法以动词命名.尽量简短。
can,has,is 返回一个布尔值
get,find,read 返回一个非布尔值
set 用来保存一个值
常量,采用大写字母和下划线来命名,下划线用以分隔单词。MAX_COUNT
构造函数采用驼峰命名法,第一个字母也大写.通常以名词来命名
6.使用双引号来括住字符串。
7.null的使用
null是一个特殊值和undefind不同。
使用null的场景:
1.用来初始化一个变量,这个变量可能赋值为一个对象。
2.用来和一个已经初始化的变量比较,这个变量可以也可以不是一个对象
3.当函数的参数期望是对象时,用做参数传入
4.当函数的返回值期望是对象时,用作返回值传出
不推荐使用的场景
1.不要使用null来检测是否传入了某个参数
2.不要用null来检测一个未初始化的变量
8.undefined的使用.表示声明但是未赋值的变量也可能是未声明的变量或方法。由于typeOf无法区分是未声明
还是未赋值。所以尽量禁用undefined。比如:
var person = null.而不要 var person;
9.使用对象直接量创建对象.
第一行包含左花括号,每个属性名称独占一行,并且保持一个缩进.最后右花括号也独占一行。
//好的写法
var book={
title:"编写风格",
author:"张三"
};
10.推荐使用数组直接量来定义数组
注释.............................................
1.单行注释以两个斜线开始,以行尾结束.独占一行上方空一行,且与本行代码保持同缩进。
2.多行注释。以/开始,/结束。采用java风格.多行注释至少包含3行。第一行/独占一行,第二行以开头,和上一行的保持左对齐,注释开始,最后一行/独占一行
/*
-
我是多行注释
*/
3.何时添加注释.当代码不够清晰时添加注释.//初始化count,画蛇添足
var count = 10;//好的写法
//改变这个值可能会让它变成青蛙
var count = 10;
语句和表达式.......................................
1.if和for即使只有一行,也要带有花括号.花括号风格采用.第一个花括号在第一行的末尾方式.
在括左圆括号之前和右圆括号之后各添加一个空格。比如:
if (true) {
//dosometing......
}
2.switch格式.case和switch左对齐.case之间没有空行.连续执行的case需要加注释说明.
switch (condition) {
case "first":
//代码
break;
case "second":
//代码
break;
}
3.禁用with
4.尽量避免使用continue,来增强代码的可读性。
5.for-in的使用,必须带有object.hasOwnProerty来避免遍历原型连中的属性.不能用for-in来遍历数组。
var prop;
for (prop in object) {
if (object.hasOwnProperty(prop)) {
console.log(" name is "+prop);
console.log(" value is "+object[prop]);
}
}
变量函数和运算符.......................................
1.变量的声明。由于javascript是变量提前的.所以局部变量的定义作为函数内第一条语句。比如:
function doSometingWithItems(items){
var i,len;
var value = 10;
var result = value+10;
for (i=0,len=items.length;i<len;i++) {
doSometing(items[i]);
}
}
当无关联的变量声明时,尽量合并var.
var value = 10,
result = value+10,
i,
len;
2.函数的声明.虽然函数声明会被javascript引擎提前,还是要求函数调用在函数声明之后。
即先声明,再调用.
函数内部的函数声明,要紧接着变量声明之后声明
函数声明不应该出现在语句块内。比如:错误写法
if (true) {
function doSometing(){
alert('h1');
}
}
函数名和左括号之间不能有空格.doSometing(item);这个明显区别于if,while等语句块。
3.立即执行的函数.javascript中允许匿名函数.比如:
//将匿名函数赋值给一个变量
var book = function(){
};
//对于立即执行的函数.需要在匿名函数上增加小括号
var book = (function(){
//doSomething
})();
4.需要做全等和全不等比较时。尽量用===和!==
5.禁止使用eval()和new Function,禁止给setTimeout和setInterval传入字符串参数
6.在css中,一定要杜绝使用css中的js表达式。(IE9已经不再支持.)比如:
.box{
width:expression(document.body.offsetWidth+"px");
}
7.最好将所有的javascript代码都放入外置文件中,以确保在HTML代码中不会有内联的javascript代码
8.尽量避免innerHTML方法,可以1.从远程服务器加载,2.加载外部html片段,3写替换函数.替换标识。
避免使用全局变量.......................................
1.尽量使用单全局变量.比如:
YUI定义了唯一全局对象YUI
jQuery定义了两个全局对象 $和jQuery 当$被其他类库使用时可以使用jQuery
Dojo定义了dojo
2.javascript中字符串,数字,布尔值,null和undefined是原始类型。判断原始类型可以用typeOf。
3.除了原始类型都是引用类型.不能用typeOf来判断了.因为都返回object.
检测自定义类型可以用instanceof来检测,function用 typeOf来检测,数组用鸭式辨形法.
function isArray(value){
if( typeof Array.isArray === "function" ){
return Array.isArray(value);
} else {
return Object.prototype.toString.call(value) === "[Object Array]";
}
}
4.检测对象中是否包含某个属性,用in来判断.
配置数据......................................
1.可配置的数据,最好单独存放在一个文件里
url
需要展现给用户的字符串
重复的值
设置(比如每页的配置项)
任何可能发生变更的值
var config = {
MSG_INVALID_VALUE:"Invalid value",
URL_INVALID:"/error/index.jsp",
CSS_SELECTED:"selected"
}
2.适当的抛出异常.throw new Error("");javascript可以 throw 任何东西。但是有些浏览器会不认
尽量throw new Error("");
3.TODO,对于需要以后处理的地方 必须加入//TODO{注解}