一 基本的格式化
- 语句结尾
依赖于分析器的自动分号插入(ASI)机制,javascript代码省略分号是可以正常工作。ASI会自动寻找出代码中应当使用分号但实际没有分号的位置,并插入分号。在大多数情况下ASI都会正确插入分号,不会产生错误。
// 原始代码
function getData() {
return
{
title: 'rule',
author: 'mangoyi'
}
}
// 分析器会自动解释成
function getData() {
return ;
{
title: 'rule',
author: 'mangoyi'
}
}
- 行
javascript编码风格倾向于将行长度限定在80个字符。
if (isLeapYear && isFebruary && day == 29 && itsYourBirthday &&
noPlans) {
waitAnotherFourYears();
}
以上代码注释:if条件语句拆分成两行,断行是在&&运算符之后(总是将一个运算符置于行尾,ASI就不会自作主张地插入分号了)
- 命名
核心遵照驼峰式大小写命名法
变量名总是遵循驼峰大小写命名法,并且命名前缀应当是名字。以名词为前缀可以让变量和函数区分开来,因为函数名前应当是动词。见下面例子:
// good
var count = 10;
var myName = 'Mangoyi';
var found = true;
// bad (变量看起来像是函数)
var getCount = 10;
var isFound = true;
// good
function getName() {
return myName;
}
// bad (函数看起来像是变量)
function theName() {
return myName;
}
常量
约定使用大写字母和下划线来命名,下划线用以分割单词,比如:
var MAX_COUNT = 10;
构造函数
构造函数以大写字母开头的驼峰式命名,常常是名词,因为构造函数是用来创建某个类型的实例的。
// good
function Person(name) {
this.name = name;
}
Person.prototype.sayName = function() {
alert(this.name);
}
var me = new Person('Mangoyi');
字符串
Javascript中,字符串是独一无二的,字符串可以使用双引号括起来,也可以用单引号括起来。
// 合法javascript代码
var name = "Mangoyi says,\"Hi\"";
//也是合法的javascript代码
var name = 'mangoyi says,"Hi"'
注:明确禁止创建多行字符串,多行字符串的一种替代方法是,使用字符串连接符(+)将字符串分成多份
// bad(不允许)
var longString = "Here's the story, of a man \
named Mangoyi";
// good
var longString = "Here's the story, of a man " +
"named Mangoyi";
数字
请不要省略小数点之前或之后的数字。
null
null是一个特殊值。
理解null最好的方式是将它当做对象的占位符。
// good
var person = null;
function getPerson() {
if (condition) {
return new Person('Mangoyi');
} else {
return null;
}
}
// good
var person = new getPerson();
if (person !== null) {
doSomething();
}
// bad(不好的做法: 用来和为初始化的变量比较)
var person;
if (person != null) {
doSomething();
}
// bad(不好的做法:检测是否传入了参数)
function doSomething(arg1, arg2) {
if (arg2 != null) {
doSomethingElse();
}
}
undefined
undefined是一个特殊值
那些没有被初始化的变量都有一个初始值,即undefined,表示这个变量等待被赋值。
typeof的行为
不管值是undefined的变量还是未声明的变量,typeof运算的结果都是‘undefined’ 比如:
// foo 未被声明
var person;
console.log(typeof person); // "undefined"
console.log(typeof foo); // "undefined"
当变量未声明时,如果使用了一个可能赋值未一个对象的变量时,应将其赋值为null。
// good
var person = null;
console.log(person ==== null) //true
则此时typeof运算null类型时则返回‘object’,就可以和undefined区分开了。
对象直接量
创建对象最流行的一种做法是使用对象直接量。
// bad
var book = new Object();
book.title = 'Javascript';
book.author = 'Mangoyi';
很少见到上面这种写法。
对象直接量允许你将所有属性都括在一对花括号中。
所以,定义对象直接量时,采用如下标准写法:
var book = {
title : 'Javascript',
author : 'Mangoyi'
};
数组直接量
和对象直接量相似,数组直接量是Javascript中定义数组最简洁的一种方式。
不赞成显示地使用Array构造函数来创建数组。比如:
// bad
var colors = new Array('red', 'green', 'blue');
// good
var colors = ['red', 'green', 'blue'];
文章内容从《编写可维护的Javascript》[美] Nicholas C. Zakas著 书中总结写出。