以方便http与https协议切换,除非必须使用某个协议,否则都忽略。
# HTML
<link rel="stylesheet" href="//static.sample.com/index.css">
<title>Sample</title>
<script src="//static.sample.com/index.js"></script>
<link rel="shortcut icon" href="//static.sample.com/favicon.ico">
...
# CSS
body {
background-image: url(//static.sample.com/a-1.png);
}
# Javascript
window.location.href = '//www.sample.com'
当我们进行文本粘贴代码的时候,当使用 tab
很容易导致 tab 无法对齐,直接使用空格的兼容性最强。
Hello world!!!
__Hello world!!!
<div id="sample"></div>
空格容易造成 git,svn 等版本管理工具新增一个版本,该版本没有任何作用。
<!-- 推荐 -->
<div></div>__
<!-- 不推荐 -->
<div></div>
通过 <meta charset="utf-8">
指定 HTML 模板和文档的编码。不再要指定样式,脚本等编码类型。
# 设定字符编码是通过 <meta> 标签进行
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
# HTML5,我们只需要这样写
<meta charset="utf-8">
# HTML
<!-- TODO: 添加列表 -->
<ul></ul>
# CSS
/* TODO: 添加样式 */
body {}
# Javascript
// TODO(David Jones): 添加弹框
alert('Hello world!!!')
使用 html5
的规范 <!DOCTYPE html>
,因为 HTML
已经被 HTML5 统一规范采用并满足 web
应用的需求。因此我们可以不再使用 XHTML
定义文档头了。
<!DOCTYPE html>
<!-- 不推荐 -->
<article>This is a text.
<!-- 推荐 -->
<article>This is a text.</article>
例如: p
代表段落, a
代表链接等。
<!-- 不推荐 -->
<a onclick="goSample()">sample</a>
<!-- 推荐 -->
<a href="sample/">sample</a>
<!-- 不推荐 -->
<img src="./sample.png">
<!-- 推荐 -->
<img src="./sample.png" alt="sample image">
<canvas>Fuck, your brower is not support canvas.</canvas>
如 —
(—), ”
(”), 或者 ☺
(☺),当然 <
与 &
那些是必须要转码。
<!-- 不推荐 -->
The currency symbol for the Euro is “&eur;”.
<!-- 推荐 -->
The currency symbol for the Euro is “€”.
<!-- 不推荐 -->
<!DOCTYPE html>
<html>
<head>
<title>Spending money, spending bytes</title>
</head>
<body>
<p>Sic.</p>
</body>
</html>
<!-- 推荐 -->
<!DOCTYPE html>
<title>Saving money, saving bytes</title>
<p>Qed.
如果 HTML5 已经有默认值,则我们可以直接忽略使用默认值。
<!-- 不推荐 -->
<input type="text" name="nickname">
<script src="//static.sample.com/a.js" type="text/javascript"></script>
<!-- 推荐 -->
<input name="nickname">
<script src="//static.sample.com/a.js"></script>
部分标签可以省略结束标签,例如 li
, p
, thead
, tbody
, tr
, td
等
<!-- 不推荐 -->
<table>
<thead>
<tr>
<th>Taxes
<tbody>
<tr>
<td>$ 4.50
</table>
<!-- 推荐 -->
<table>
<thead>
<tr>
<th>Taxes</th>
</tr>
</thead>
<tbody>
<tr>
<td>$ 4.50</td>
</tr>
</tbody>
</table>
<blockquote>
<p><em>Space</em>, the final frontier.</p>
</blockquote>
<ul>
<li>Moe</li>
<li>Larry</li>
<li>Curly</li>
</ul>
<table>
<thead>
<tr>
<th scope="col">Income</th>
<th scope="col">Taxes</th>
</tr>
</thead>
<tbody>
<tr>
<td>$ 5.00</td>
<td>$ 4.50</td>
</tr>
</tbody>
</table>
<!-- 不推荐 -->
<a class='btn btn-cyan'>Sign in</a>
<!-- 推荐 -->
<a class="btn btn-cyan">Sing in</a>
请确保 CSS 有效。无效的样式就不要写到样式表里面。
<!-- 不推荐: 完全不知道是什么东西 -->
#yee-1901 {}
<!-- 不推荐: 太表象,太笼统 -->
.button-green {}
.clear {}
<!-- 推荐: 具体 -->
#gallery {}
#login {}
.video {}
<!-- 推荐: 通用 -->
.aux {} # 辅助
.alt {} # 代替
<!-- 不推荐 -->
#navigation {}
.atr {}
<!-- 推荐: 通用的可以缩写,否则尽量详细 -->
#nav {}
.author {}
<!-- 不推荐 -->
ul#sample {}
div.error {}
<!-- 推荐 -->
#sample {}
.error {}
<!-- 不推荐 -->
padding-bottom: 2em;
padding-left: 1em;
padding-right: 1em;
padding-top: 0;
border-top-style: none;
line-height: 1.6;
font-family: palatino, georgia, serif;
font-size: 100%;
<!-- 推荐 -->
padding: 0 1em 2em;
border-top: 0;
font: 100%/1.6 palatino, georgia, serif;
margin: 0;
padding: 0;
font-size: 0.8em;
<!-- 不推荐 -->
color: #aabbcc;
<!-- 推荐 -->
color: #abc;
前缀统一使用 -
链接,非 _
或驼峰。
<!-- 不推荐 -->
.btndisabled {}
.btn_disabled {}
#mediaBody {}
<!-- 推荐 -->
.btn-disabled {}
#media-body {}
尝试另外一种方式去完成样式,而不是一开始就用 hack
手段。
按照盒子模型由外到内的顺序来编写样式:
- 类型 (display)
- 浮动 (float)
- 定位 (position)
- top
- right
- bottom
- left
- 边距 (marign)
- 边 (border)
- 内边距 (padding)
- 宽,高 (width/height)
- 样式 (shadow, ouline, cursor等)
- 文本样式 (line-hgiht等)
- 颜色,字体 (color/font等)
记住某些属性一定要添加浏览器前缀(-o-
, -webkit-
, -ms-
, -moz-
)
margin: 0;
border: 1px solid #ccc;
-moz-border-radius: 4px;
-webkit-border-radius: 4px;
border-radius: 4px;
padding: 0;
width: 100px;
height: 100px;
@media screen {
html {
background: #fff;
color: #444;
}
}
<!-- 不推荐 -->
body {
color: #333;
font-size: 14px
}
<!-- 推荐 -->
body {
color: #333;
font-size: 14px;
}
<!-- 不推荐 -->
body {
color:#333;
}
<!-- 推荐 -->
body {
color: #333;
}
<!-- 不推荐 -->
.error{
color: red;
}
.error
{
color: red;
}
<!-- 推荐 -->
.error {
color: red;
}
<!-- 不推荐 -->
a:focus, a:active {
position: relative; top: 1px;
}
<!-- 推荐 -->
h1,
h2,
h3 {
color: #333;
font-size: 14px;
}
html {
color: #333;
}
body {
font-size: 14px;
}
url
的值均不使用任何引号,而如果确实要使用 @charset
请使用双引号,而其他情况均用单引号。
single quotation marks are not permitted(什么情况下不允许单引号)
@charset "ISO-8859-1";
<!-- 不推荐 -->
background: url("//static.sample.com/a.png");
font-family: "open sans", arial, sans-serif;
<!-- 推荐 -->
background: url(//static.sample.com/a.png);
font-family: 'open sans', arial, sans-serif;
/* Header */
#header {}
/* Footer */
#footer {}
/* Gallery */
#gallery {}
var arr = [];
window.arr = [];
声明静态变量使用全大写,用下划线链接。不适用 const
关键字
var TIMEOUT_IN_MILLISECONDS = 60;
g.TIMEOUT_IN_MILLISECONDS = 60;
window.TIMEOUT_IN_MILLISECONDS = 60;
var q = function() {
return 24;
}
(function() {})()
# Throw: (intermediate value)(...) is not a function
var x = {}
[function(){}][0]()
# Throw: Cannot read property '0' of undefined
var q = 1
-1 == 0 ? alert('equal') : alert('no equal')
# Alert: euqal
function q() {
return a();
function a() {
return 1;
}
}
<!-- 不推荐 -->
if (x) {
function qq() {
}
}
<!-- 推荐 -->
if (x) {
var qq = function() {
}
}
<!-- 优化 -->
var qq;
if (x) {
qq = function() {
}
}
throw 'oh my god, dead loop, dead...'
typeof Boolean(1) === 'boolean';
typeof new Boolean(1) === 'object';
当 dom 元素对 function 有引用时,该a, b 将不会被回收,IE 内存泄露就是这个原因
- 循环引用(Circular References) — IE浏览器的COM组件产生的对象实例和网页脚本引擎产生的对象实例相互引用,就会造成内存泄漏。这也是Web页面中我们遇到的最常见和主要的泄漏方式;
- 内部函数引用(Closures) — Closures可以看成是目前引起大量问题的循环应用的一种特殊形式。由于依赖指定的关键字和语法结构,Closures调用是比较容易被我们发现的;
- 页面交叉泄漏(Cross-Page Leaks) — 页面交叉泄漏其实是一种较小的泄漏,它通常在你浏览过程中,由于内部对象薄计引起。下面我们会讨论DOM插入顺序的问题,在那个示例中你会发现只需要改动少量的代码,我们就可以避免对象薄计对对象构建带来的影响;
- 伪泄露(Pseudo-Leaks) — 这个不是真正的意义上的泄漏,不过如果你不了解它,你可能会在你的可用内存资源变得越来越少的时候极度郁闷。为了演示这个问题,我们将通过重写Script元素中的内容来引发大量内存的"泄漏"。
<!-- 不推荐 -->
function foo(element, a, b) {
element.onclick = function() {
return a + b;
}
}
<!-- 推荐 -->
function foo(element, a, b) {
element.onclick = bar(a, b);
}
function bar(a, b) {
return function() {
return a + b;
}
}
eval
仅使用于 rpc
解码 json
, 若要使用类此方法,可选择 new Function('arg1', '...')
eval('{"name": "David Jones"}');
一般很少使用 with
除了在模板引擎中使用,一般很少使用 with
不要使用 for in
来遍历 array
, 它只能遍历对象
varName # 声明名
funcName # 函数名
ClassName # 类名
CONSTANT_NAME # 静态变量
_privateName # 私有成员
protectName # 保护成员
var_args # 可变参数
统一使用小写包括扩展名,'.js' 使用 -
而非 _
index.js
text-overflow.js
var a = 1
, b = 2
, c
, d
, e = 1 ? 1 : 0
, f = fucnNameA()
? 1 - 1
: 2 - 1
, g = (function() {
return 1;
})()
;
if (funcNameA() || funcNameB()) {
funcName()
? funcName()
: funcName();
}