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