摘要:所有的塊語句都應(yīng)當使用花括號包括花括號的對齊方式第一種風(fēng)格第二種風(fēng)格塊語句間隔第一種在語句名圓括號和左花括號之間沒有空格間隔第二種在左圓括號之前和右圓括號之后各添加一個空格第三種在左圓括號后和右圓括號前各添加一個空格我個人喜歡在右括號之后添
所有的塊語句都應(yīng)當使用花括號, 包括:
if
for
while
do...while...
try...catch...finally
3.1 花括號的對齊方式
// 第一種 java風(fēng)格 if(condition) { doSomething(); }else { doSomethingElse(); } // 第二種 C#風(fēng)格 if(condition) { doSomething(); } else { doSomethingElse(); }
3.2 塊語句間隔
// 第一種 在語句名、圓括號和左花括號之間沒有空格間隔 if(condition){ doSomething(); } // 第二種 在左圓括號之前和右圓括號之后各添加一個空格 if (condition) { doSomething(); } // 第三種 在左圓括號后和右圓括號前各添加一個空格 if ( condition ) { doSomething(); } // 我個人喜歡 在右括號之后添加一個空格 if(condition) { doSomething(); }
我認為我的這種寫法不僅看起來緊湊而且對于條件判斷也更易讀. 第二種風(fēng)格也是用的很廣泛,這種風(fēng)格是第一種和第三種的折衷.
3.3 switch語句
源自C, 但是Java和Javascript中又沒有完全相同的語法. js中的switch語句和其他語言是不一樣的: switch語句中可以使用任意類型值, 任何表達式都可合法的用于case從句. 但在其他語言中則必須使用原始值和常量.
3.3.1 縮進
大體分為兩種格式:
// 第一種 個人傾向于這種 switch(condition) { case "first": // 代碼 break; case "second": // 代碼 break; case "third": // 代碼 break; default: // 代碼 } // 第二種 Crockford的編程規(guī)范和Dojo編程風(fēng)格指南提倡 switch(condition) { case "first": // 代碼 break; case "second": // 代碼 break; case "third": // 代碼 break; default: // 代碼 }
3.3.2 case語句的"連續(xù)執(zhí)行"
switch(condition) { // 明顯的依次執(zhí)行 case "first": case "second": // 代碼 break; case "third": // 代碼 break; default: // 代碼 }
只要是有意為之并且添加了注釋的, 就可以使用case語句的連續(xù)執(zhí)行.
3.3.3 default
是否需要default.
// 第一種 不應(yīng)該省略default, 哪怕毛事沒有. switch(condition) { case "first": // 代碼 break; case "second": // 代碼 break; default: // default中沒有邏輯 } // 第二種 沒有默認行為且寫了注釋的情況下省略default 個人傾向于這種 switch(condition) { case "first": // 代碼 break; case "second": // 代碼 break; // 沒有default }
3.4 with語句
with語句可以更改包含的上下文解析變量的方式. 通過with可以用局部變量和函數(shù)的形式來訪問特定對象的屬性和方法, 這樣就可以將對象前綴統(tǒng)統(tǒng)省略掉.如果一段代碼中寫了很多對象的成員, 則可以使用with語句來縮短這段代碼.
var book = { title: "編寫可維護的js", author: "Nicholas" }; var message = "The book is "; with(book) { message += title; message += " by " + author; }
這個例子中, with語句花括號內(nèi)的代碼中的book屬性都是通過局部變量來讀取的,
3.5 for循環(huán)
有兩種方法可以更改循環(huán)的執(zhí)行過程(除了使用return或throw語句). 第一種方法是使用break語句. 不管所有的循環(huán)迭代有沒有執(zhí)行完畢, 使用break總是可以立即退出循環(huán).
var values = [1, 2, 3, 4, 5]; for(var i = 0; i <= values.length; i++) { if(i == 2) { break; // 迭代不會繼續(xù) } process(values[i]); }
這個循環(huán)執(zhí)行兩次, 在第三次執(zhí)行process()之前就終止循環(huán)了.
第二種更改循環(huán)執(zhí)行過程的方法是使用continue. continue語句可以立即退出(本次)循環(huán), 而進入下一次循環(huán)迭代.
var values = [1, 2, 3, 4, 5]; for(var i = 0; i <= values.length; i++) { if(i == 2) { continue; // 跳過本次迭代 } process(values[i]); }
這里的循環(huán)執(zhí)行兩次, 跳過第三次直接進入第四次, 然后一直執(zhí)行到最后一次.
Crockford的編程規(guī)范不允許使用continue, 主張與其使用continue不如使用條件語句. 上面的例子可以修改成這樣.
var values = [1, 2, 3, 4, 5]; for(var i = 0; i <= values.length; i++) { if(i != 2) { process(values[i]); } }
推薦盡可能避免使用continue, 使用應(yīng)當根據(jù)代碼的可讀性來決定.
3.6 for-in循環(huán)
for-in遍歷對象屬性. 返回屬性名.
for-in有個問題, 不僅遍歷對象的實例屬性, 還會遍歷出來從原型繼承來的屬性. 當遍歷自定義對象的屬性時, 往往會因為意外的結(jié)果而終止. 由于這樣最好使用hasOwnProperty()方法來為for-in循環(huán)出實例屬性.
// 不遍歷從原型繼承來的屬性 for(var prop in object){ if(object.hasOwnProperty(prop)) { console.log("Property name is " + prop); console.log("Property value is " + object[prop]); } } // 包含遍歷從原型繼承來的屬性 for(var prop in object){ console.log("Property name is " + prop); console.log("Property value is " + object[prop]); } // 最好不要用for-in來遍歷數(shù)組 會有潛在的錯誤 var items= [1, 2, 3, 4, 5]; for(var i in items){ process(items[i]); }
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/87373.html
摘要:程序是寫給人讀的只是偶爾讓計算機執(zhí)行一下當你剛剛組建一個團隊時團隊中的每個人都各自有一套編程習(xí)慣畢竟每個成員都有著不同的背景有些人可能來自某個皮包公司身兼數(shù)職在公司里面什么事都做還有些人會來自不同的團隊對某種特定的做事風(fēng)格情有獨鐘或恨之入骨 程序是寫給人讀的,只是偶爾讓計算機執(zhí)行一下. Donald Knuth 當你剛剛組建一個團隊時,團隊中的每個人都各自有一套編程習(xí)慣.畢竟,...
摘要:由于第四章太稀松平常了于是就直接跳到第五章了這里我就草草的說一下第四章的幾個點吧在嚴格模式的應(yīng)用下不推薦將用在全局作用域中相等推薦盡量使用和守則如果是在沒有別的方法來完成當前任務(wù)這時可以使用原始包裝類型不推薦創(chuàng)建類型時用等創(chuàng)建類型從這一章節(jié) 由于第四章太稀松平常了, 于是就直接跳到第五章了.這里我就草草的說一下第四章的幾個點吧 在嚴格模式的應(yīng)用下 不推薦將use strict;用在全...
摘要:中常常會看到這種代碼變量與的比較這種用法很有問題用來判斷變量是否被賦予了一個合理的值比如不好的寫法執(zhí)行一些邏輯這段代碼中方法顯然是希望是一個數(shù)組因為我們看到的擁有和這段代碼的意圖非常明顯如果參數(shù)不是一個數(shù)組則停止接下來的操作這種寫法的問題在 js中, 常常會看到這種代碼: 變量與null的比較(這種用法很有問題), 用來判斷變量是否被賦予了一個合理的值. 比如: const Contr...
摘要:注釋是代碼中最常見的組成部分它們是另一種形式的文檔也是程序員最后才舍得花時間去寫的但是對于代碼的總體可維護性而言注釋是非常重要的一環(huán)打開一個沒有任何注釋的文件就好像趣味冒險但如果給你的時間有限這項任務(wù)就變成了折磨適度的添加注釋可以解釋說明代 注釋是代碼中最常見的組成部分.它們是另一種形式的文檔,也是程序員最后才舍得花時間去寫的.但是,對于代碼的總體可維護性而言,注釋是非常重要的一環(huán).打...
摘要:代碼無非是定義一些指令的集合讓計算機來執(zhí)行我們常常將數(shù)據(jù)傳入計算機由指令對數(shù)據(jù)進行操作并最終產(chǎn)生一個結(jié)果當不得不修改數(shù)據(jù)時問題就來了任何時候你修改源代碼都會有引入的風(fēng)險且值修改一些數(shù)據(jù)的值也會帶來一些不必要的風(fēng)險因為數(shù)據(jù)時不應(yīng)當影響指令的正 代碼無非是定義一些指令的集合讓計算機來執(zhí)行. 我們常常將數(shù)據(jù)傳入計算機, 由指令對數(shù)據(jù)進行操作, 并最終產(chǎn)生一個結(jié)果. 當不得不修改數(shù)據(jù)時問題就來...
閱讀 2628·2021-11-19 09:56
閱讀 874·2021-09-24 10:25
閱讀 1632·2021-09-09 09:34
閱讀 2195·2021-09-09 09:33
閱讀 1052·2019-08-30 15:54
閱讀 542·2019-08-29 18:33
閱讀 1264·2019-08-29 17:19
閱讀 505·2019-08-29 14:19