国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

15條JavaScript最佳實踐小結

2019-11-20 22:26:02
字體:
來源:轉載
供稿:網友
本文檔整理大部分公認的、或者少有爭議的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.”
主站蜘蛛池模板: 时尚| 阳西县| 崇信县| 香河县| 平和县| 沙湾县| 沂南县| 涟水县| 金川县| 绍兴市| 甘洛县| 军事| 嵩明县| 阿图什市| 麦盖提县| 孙吴县| 蓝山县| 合川市| 松滋市| 高唐县| 静海县| 黑山县| 临澧县| 阿巴嘎旗| 泽普县| 塔河县| 金湖县| 青川县| 绥化市| 丰都县| 利辛县| 潮安县| 自贡市| 孟州市| 曲靖市| 富裕县| 贞丰县| 高雄市| 闽清县| 曲阜市| 苗栗县|