HTML
语法
- 缩进使用soft tab(4个空格);
- 嵌套的节点应该缩进;
- 在属性上,使用双引号,不要使用单引号;
- 不要在自动闭合标签结尾处使用斜线(HTML5 规范 指出他们是可选的);
<img src="">
- 不要忽略可选的关闭标签,例: 和
。
<!DOCTYPE html>
根据HTML5规范:应在html标签上加上lang属性。这会给语音工具和翻译工具帮助,告诉它们应当怎么去发音和翻译。
比如
<html lang="zh-cn">
<html lang="en-us">
<meta charset="UTF-8">
通过声明一个明确的字符编码,让浏览器轻松、快速的确定适合网页内容的渲染方式,通常指定为’UTF-8’。
<!DOCTYPE html>
<html lang="zh-cn">
<head>
<meta charset="UTF-8">
<title>Document</title>
<meta http-equiv="X-UA-Compatible" content="IE=Edge">
</head>
<body>
</body>
</html>
根据HTML5规范, 通常在引入CSS和JS时不需要指明 type,因为 text/css 和 text/javascript 分别是他们的默认值
<link rel="stylesheet" href="code_guide.css">
<script src="code_guide.js"></script>
boolean属性指不需要声明取值的属性,XHTML需要每个属性声明取值,但是HTML5并不需要;
<-- Good -->
<input type="text" disabled>
<input type="checkbox" value="1" checked>
<select>
<option value="1" selected>1</option>
</select>
<-- Bad -->
<input type="text" disabled="disabled">
<input type="checkbox" value="1" checked="checked">
<select>
<option value="1" selected>1</option>
</select>
<-- Good -->
<label class="uiLabel">
&{'administrationgroup.code'}:
</label>
<input class="uiComponent" type="text"/>
<-- Bad -->
<span>
<label class="uiLabel">
&{'administrationgroup.code'}:
</label>
<span class="uiComponent">
<input type="text"/>
</span>
</span>
使用soft tab(4个空格)。
不要超过80,但如果编辑器开启word wrap可以不考虑单行长度。
以下几种情况后需加分号:
变量声明
表达式
return
throw
break
continue
do-while
var x = 1;
x++;
return;
throw new Error(‘timeout’);
break;
continue;
do {
x++;
} while (x < 10);
换行的地方,行末必须有’,’或者运算符;
以下几种情况不需要换行:
else, catch, finally
以下几种情况需要换行:
代码块’{‘后和’}’前
变量赋值后
// not good
var a = {
b: 1
, c: 2
};
x = y
? 1 : 2;
// good
var a = {
b: 1,
c: 2
};
x = y ? 1 : 2;
x = y ?
1 : 2;
// no need line break with ‘else’, ‘catch’, ‘finally’
if (condition) {
…
} else {
…
}
try {
…
} catch (e) {
…
} finally {
…
}
// not good
function test()
{
…
}
// good
function test() {
…
}
// not good
var a, foo = 7, b,
c, bar = 8;
// good
var a,
foo = 7,
b, c, bar = 8;
最外层统一使用单引号。
// Good
function foo (data) {
return '<a href="#" onclick="clickFn(\\''+data.id+'\\')"></a>'
}
// bad
function foo (data) {
return "<a href='#' onclick='clickFn(\\'"+data.id+"\\')'></a>"
}
下列关键字后必须有大括号(即使代码块的内容只有一行):if, else, for, while, do, switch, try, catch, finally, with
。
// not good
if (condition)
doSomething();
// good
if (condition) {
doSomething();
}
if(data && data.length) //这是合理的判断,&&是依次判断,遇否中断, 建议
var name = data.name || ''; //依次都判断,遇true赋值,建议
var isName = names.split(',').lenght > 1 ? '名称正确': '名称错误';
var isCanvas = !!(canvas.getContext('2d'));
// Good
var obj = {};
var users = [];
var str = 'abc';
var num = 1;
var isDefault = false;
// bad
var obj = new Object();
var users = new Array();
var str = new String('abc');
var num = new Number(1);
var isDefault = new Boolean(false);
// 比如 class 是保留字
var obj = {
name: 'userid',
class: 'text-left'
};
function getData () {
$.get('/abc', getDataCallback)
}
function getDataCallback (data) {
console.log(data);
}
function getData () {
$.get('/abc', function (data) {
console.log(data);
})
}
关键字
break
case
catch
continue
default
delete
do
else
finally
for
function
if
in
instanceof
new
return
switch
this
throw
try
typeof
var
void
while
with
保留字
abstract
boolean
byte
char
class
const
debugger
double
enum
export
extends
final
float
goto
implements
import
int
interface
long
native
package
private
protected
public
short
static
super
synchronized
throws
transient
volatile
setInterval和setTimeout 传递字符串也是变相使用eval
setInterval('foo()', 100)
根据官方的建议:具有 true 和 false 两个属性的属性,这些checked、 selected、 readonly、 disabled、 autocomplete、autoplay、loop、muted、preload、autofocus、required、open 使用prop(),其他的使用 attr()
// bad
$option.attr('selected', 'selected'); // jquery 的方法
option.setAttribute('selected', 'selected'); 原生的方法
// good
$option.prop('selected', true); // jquery 的方法
option.selected = true; 原生的方法
推荐你们都读一遍或者多遍这本书,里面有javascript最好的实践。
公司有购买的在书架上