本文檔整理大部分公認的、或者少有爭議的JavaScript良好書寫規范(Best Practice)。一些顯而易見的常識就不再論述(比如要用對象支持識別判斷,而不是瀏覽器識別判斷;比如不要嵌套太深)。條目順序按重要級粗略的從高到低排列。
把外部JavaScript文件放在HTML底部
我們的目標是相同的:為用戶盡可能快地顯示內容。當載入一個腳本文件的時候,HTML會停止解析,直到腳本載入完畢。因此,用戶可能會長時間對著一個空白的屏幕,看上去什么都沒有發生。如果你的JavaScript代碼只是增加一些功能(比如按鈕的點擊動作),那么盡管大膽地把文件引用放在HTML底部吧(就在</body>之前),你會看到明顯的速度提升。如果是用于其他目的的腳本文件,則需要慎重地考慮。但無論如何,這毫無疑問是一個非常值得考慮的地方。
優化循環
循環遍歷一個數組
//這段糟糕的代碼會在每次進入循環的時候都計算一次數組的長度
var names = ['George','Ringo','Paul','John'];
for(var i=0;i<names.length;i++){
doSomeThingWith(names[i]);
}
//這樣的話,就只會計算一次了
var names = ['George','Ringo','Paul','John'];
var all = names.length;
for(var i=0;i<all;i++){
doSomeThingWith(names[i]);
}
//這樣就更加簡短了
var names = ['George','Ringo','Paul','John'];
for(var i=0,j=names.length;i<j;i++){
doSomeThingWith(names[i]);
}
//這段代碼的糟糕之處在于,它把變量聲明放在循環體內了,每次循環都會創建變量
for(var i = 0; i < someArray.length; i++) {
var container = document.getElementById('container');
container.innerHtml += 'my number: ' + i;
console.log(i);
}
//在循環體外聲明變量,變量只會創建一次
var container = document.getElementById('container');
for(var i = 0, len = someArray.length; i < len; i++) {
container.innerHtml += 'my number: ' + i;
console.log(i);
}
用盡量簡短的代碼
如果可以增加可讀性的話,那么使用代碼的簡短格式是有意義的,下面是一份不完全的列表:
//對于條件判斷只有兩次的,這是一種冗長的寫法
var direction;
if(x > 100){
direction = 1;
} else {
direction = -1;
}
//更好的代碼
var direction = (x > 100) ? 1 : -1;
//判斷一個 變量是否定義,如果否,就賦予一個值,糟糕的代碼
if(v){
var x = v;
} else {
var x = 10;
}
//更好的代碼
var x = v || 10;
//重復了變量名很多次
var cow = new Object();
cow.colour = 'brown';
cow.commonQuestion = 'What now?';
cow.moo = function(){
console.log('moo');
}
cow.feet = 4;
cow.accordingToLarson = 'will take over the world';
//更好的寫法是這樣
var cow = {
colour:'brown',
commonQuestion:'What now?',
moo:function(){
console.log('moo);
},
feet:4,
accordingToLarson:'will take over the world'
};
//重復了很多次數組名
var aweSomeBands = new Array();
aweSomeBands[0] = 'Bad Religion';
aweSomeBands[1] = 'Dropkick Murphys';
aweSomeBands[2] = 'Flogging Molly';
aweSomeBands[3] = 'Red Hot Chili Peppers';
aweSomeBands[4] = 'Pornophonique';
//更好的代碼
var aweSomeBands = [
'Bad Religion',
'Dropkick Murphys',
'Flogging Molly',
'Red Hot Chili Peppers',
'Pornophonique'
];
單引號和雙引號
為了避免混亂,我們建議在HTML中使用雙引號,在JavaScript中使用單引號。
//html
<img src="picture.gif" />
//JavaScript
<script type="text/javascript">
document.write('<p>');
</script>
//一段混用的jQuery代碼
$('h1').after('<div id="content"><h2>目錄</h2><ol></ol></div>');
避免混入其他技術
CSS:假設我們的頁面上有必須填入的輸入框(擁有class“mandatory”),如果它沒有被輸入數據,周圍就會加上紅色邊框。
//一段混合了其他技術的代碼會這樣做:
var f = document.getElementById('mainform');
var inputs = f.getElementsByTagName('input');
for(var i=0,j=inputs.length;i<j;i++){
if(inputs[i].className === 'mandatory' &&
inputs[i].value === ''){
inputs[i].style.borderColor = '#f00';
inputs[i].style.borderStyle = 'solid';
inputs[i].style.borderWidth = '1px';
}
}
//一段良好的代碼會這么做:將風格化的事情交給CSS吧
var f = document.getElementById('mainform');
var inputs = f.getElementsByTagName('input');
for(var i=0,j=inputs.length;i<j;i++){
if(inputs[i].className === 'mandatory' &&
inputs[i].value === ''){
inputs[i].className += ' error';
}
}
HTML:假設我們有內多HTML內容需要用JavaScript來載入,那么使用Ajax載入單獨的文件,而不是通過JavaScript處理DOM,后者會讓代碼難以處理,并且出現難以維護的兼容性問題。
驗證JavaScript代碼
瀏覽器處理JavaScript代碼可能會非常寬容,但我建議你不要依賴瀏覽器的解析能力,因此養成了懶散的編碼習慣。
最簡單的檢測你的代碼質量的方法是通過一個在線JavaScript驗證工具JSLint。
“JSLint takes a JavaScript source and scans it. If it finds a problem, it returns a message describing the problem and an approximate location within the source. The problem is not necessarily a syntax error, although it often is. JSLint looks at some style conventions as well as structural problems. It does not prove that your program is correct. It just provides another set of eyes to help spot problems.”
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
成人免费视频97|
国产日韩在线播放|
精品视频久久久久久久|
国自产精品手机在线观看视频|
中文字幕视频在线免费欧美日韩综合在线看|
国产精品久久久久久久app|
欧美一级免费视频|
中文字幕在线成人|
久久久久久中文字幕|
久久天天躁狠狠躁夜夜av|
欧美激情成人在线视频|
欧美国产第二页|
欧美巨大黑人极品精男|
精品视频在线观看日韩|
91最新国产视频|
色综合影院在线|
国产精品91免费在线|
国产日韩av高清|
久久电影一区二区|
中文字幕日韩精品在线观看|
97热在线精品视频在线观看|
亚洲精品国产精品国自产观看浪潮|
亚洲天堂男人天堂女人天堂|
国产成人精品a视频一区www|
91tv亚洲精品香蕉国产一区7ujn|
欧美成人在线免费|
亚洲欧美日韩一区二区在线|
91精品国产自产在线|
亚洲国产97在线精品一区|
久热在线中文字幕色999舞|
欧美裸体xxxx极品少妇|
韩剧1988在线观看免费完整版|
久久躁日日躁aaaaxxxx|
久久久久久久久91|
97在线视频精品|
国产成人久久久精品一区|
亚洲理论电影网|
国产精品情侣自拍|
色偷偷亚洲男人天堂|
视频直播国产精品|
国产精品草莓在线免费观看|
国产精品自拍小视频|
欧美日韩国产精品一区|
欧美影院在线播放|
国产91色在线免费|
国内精品国产三级国产在线专|
欧美激情久久久|
国产suv精品一区二区三区88区|
欧美久久久精品|
日本国产精品视频|
91免费电影网站|
最近更新的2019中文字幕|
亚洲影院色无极综合|
国产精品欧美亚洲777777|
成人黄色片在线|
国产在线观看一区二区三区|
97在线看免费观看视频在线观看|
欧美日韩亚洲一区二区三区|
日韩精品极品毛片系列视频|
久久精品国亚洲|
国产精品女人网站|
毛片精品免费在线观看|
欧美性猛交xxxx免费看|
欧美日韩色婷婷|
成人av在线网址|
国产精品黄色影片导航在线观看|
久久亚洲国产成人|
国产精品扒开腿做爽爽爽视频|
亚洲欧美精品伊人久久|
www高清在线视频日韩欧美|
亚洲精品久久久久久久久久久久|
亚洲国产精品字幕|
色综合老司机第九色激情|
色综合色综合久久综合频道88|
欧美日韩免费看|
成人激情在线观看|
欧美视频13p|
69久久夜色精品国产69|
久久久久99精品久久久久|
国产精品老女人视频|
97在线视频免费播放|
久久艳片www.17c.com|
精品国内亚洲在观看18黄|
国语自产精品视频在免费|
国产精品视频一区国模私拍|
91麻豆国产精品|
成人网址在线观看|
中文字幕日韩电影|
欧美成人精品在线|
久久777国产线看观看精品|
欧美激情手机在线视频|
97国产成人精品视频|
欧美综合国产精品久久丁香|
一区二区三区天堂av|
夜夜狂射影院欧美极品|
蜜臀久久99精品久久久无需会员|
91中文在线视频|
国产精品专区h在线观看|
国产成人小视频在线观看|
亚洲成人网在线观看|
国产欧美精品日韩|
久久91精品国产|
精品自在线视频|
欧美性生交大片免网|
亚洲国产精久久久久久|
精品国内亚洲在观看18黄|
亚洲va男人天堂|
中文字幕亚洲国产|
国产日韩精品视频|
日韩高清中文字幕|
8090成年在线看片午夜|
日韩成人中文字幕在线观看|
国产成人自拍视频在线观看|
久久免费精品视频|
成人写真视频福利网|
欧美伊久线香蕉线新在线|
中文字幕9999|
中国日韩欧美久久久久久久久|
亚洲视频在线视频|
国产精品va在线播放我和闺蜜|
在线午夜精品自拍|
久久久在线观看|
超碰精品一区二区三区乱码|
亚洲午夜精品视频|
狠狠综合久久av一区二区小说|
国产成人精品视频在线观看|
欧洲精品毛片网站|
欧洲成人午夜免费大片|
国产男人精品视频|
亚洲一区亚洲二区亚洲三区|
亚洲成人网在线观看|
亚洲女人天堂视频|
色吧影院999|
欧美大片在线看|
欧美视频在线看|
欧美丝袜一区二区三区|
一区二区欧美在线|
97国产精品免费视频|
2025国产精品视频|
久久频这里精品99香蕉|
俺也去精品视频在线观看|
亚洲自拍偷拍第一页|
欧美在线一区二区三区四|
日韩欧美视频一区二区三区|
国产精品一区二区在线|
精品网站999www|
97国产在线观看|
97在线视频国产|
欧美一区亚洲一区|
国产欧美久久一区二区|
亚洲一区制服诱惑|
国产精品96久久久久久又黄又硬|
久久久国产精彩视频美女艺术照福利|
日韩在线免费高清视频|
久久久久久久久亚洲|
欧美精品激情视频|
日韩性xxxx爱|
97国产suv精品一区二区62|
久久久久久亚洲精品不卡|
国产精品一区二区三|
亚洲无亚洲人成网站77777|
国产脚交av在线一区二区|
久久久久久久久久久免费|
色妞色视频一区二区三区四区|