變量和函數(shù)
? ? 變量名應(yīng)該總是遵循駝峰大小命名寫法,并且命名前綴應(yīng)當(dāng)是名詞。以名詞作為前綴可以讓變量和函數(shù)區(qū)分開來(lái),因?yàn)楹瘮?shù)名前綴應(yīng)當(dāng)是動(dòng)詞。
//????好的寫法
var count = 10;
var myName = “Nichlas”;
var found = true;
//? ? 不好的寫法:變量看起來(lái)像函數(shù)
var getcount = 10;
var isFound = true;
//????好的寫法
functiongetName() {
????????return myName;
}
//? ?不好的寫法:函數(shù)看起來(lái)像變量
function theName() {
????????return myName;
}
????????總結(jié):盡量在變量名中體現(xiàn)出值得數(shù)據(jù)類型。比如:,命名? ? count、length、size和page表明數(shù)據(jù)類型是數(shù)字,而命名? ? name、title、和message 表明數(shù)據(jù)類型是字符串。
函數(shù)命名方法:
? ? ? ? 對(duì)于函數(shù)的方法命名來(lái)說(shuō),第一個(gè)單詞應(yīng)該是動(dòng)詞。
? ? ? ? ? ? ? ? ? ? 動(dòng)詞? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ????????????? ????????????含義
????????????????????can? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?函數(shù)返回一個(gè)布爾值
????????????????????has? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?函數(shù)返回一個(gè)布爾值
????????????????????is? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 函數(shù)返回一個(gè)布爾值
????????????????????get? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 函數(shù)返回一個(gè)非布爾值
????????????????????set? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 函數(shù)用來(lái)保存一個(gè)值
示列:
????if (isEnabled()){
? ? ? ????? setName("Nicholas");??
??}???
?if(getName() === "Nicholas") {?
? ? ????? doSomething();??
??}
null:
? ? ? ? null是一個(gè)特殊值,但我們常常誤解它,將它和undefined搞混。在下列場(chǎng)景中應(yīng)當(dāng)使用null。
●? ? 用來(lái)初始化一個(gè)變量,這個(gè)變量可能賦值為一個(gè)對(duì)象。
●? ? 用來(lái)和一個(gè)已經(jīng)初始化的變量比較,這個(gè)變量可以是也可以不是一個(gè)對(duì)象。
●? ? ?當(dāng)函數(shù)的參數(shù)期望對(duì)象時(shí),用作返回值傳入。
●? ? 當(dāng)函數(shù)的返回值期望是對(duì)象時(shí),用作返回值傳出。
還有下面一些場(chǎng)景不應(yīng)當(dāng)使用null
●????不要使用null來(lái)檢測(cè)是否傳入了某個(gè)參數(shù)。
●? ? 不要用null來(lái)檢測(cè)一個(gè)未初始化的變量。
示列代碼:
// 好的方法
var person? = null;
//好的方法
function getPerson(){?
? ? ? if(condition){?
???????????????return? ? new Person(“Nicholas”);
????????} else {
? ? ? ? ? ? ? ? return null;
????????}
}
//? ? 好的方法
var person = getPerson();
if(person !== null){?
? ????doSomething();
}
// 不好的寫法:用來(lái)和未初始化的變量比較
var person;
if(person != null) {?
? ? ? doSomething();
}
?// 不好的寫法:檢測(cè)是否傳入?yún)?shù)
function doSomething(arg1,arg2,arg3,arg4){?
? ? ? if(arg4 != null){
? ? ? ? ? ? ? ? doSomethingElse();
????????}
}
????????理解null 最好的方式就是將它當(dāng)做對(duì)象的占位符(placeholder)。這個(gè)規(guī)則在所有的主流編程規(guī)范中都沒(méi)有提及,但對(duì)于全局維護(hù)性來(lái)說(shuō)至關(guān)重要。
undefined:
????????undefined 是一個(gè)特殊值,我們通常將它和null搞混。其中一個(gè)讓人頗為困惑之處在于 null == undefined 結(jié)果是true。 然而,這兩個(gè)值得用途卻各不相同。那些沒(méi)有被初始化的變量都有一個(gè)初始值,即 undefined,表示這個(gè)變量等待被賦值。
比如:
var? person;
console.log(person === undefined); //true
盡管這段代碼能正常運(yùn)行工作,但我們盡量避免代碼中使用undefined。
注釋:
????????單行注釋不應(yīng)當(dāng)連續(xù)多行注釋的形式出現(xiàn),除非你注釋掉一段換代碼。只有當(dāng)需要主是一段很長(zhǎng)的文本時(shí)才使用多行注釋。
示列代碼:
// 好的寫法
if(condition) {
? ? // 如果代碼執(zhí)行到這里,則表明通過(guò)了所有的安全檢查?
? allowed();
}
// 不好的寫法:注釋之前沒(méi)有空格
if(condition) {
?// 如果代碼執(zhí)行到這里,則表明通過(guò)了所有的安全檢查
? ? allowed();
}
? ?正確的使用注釋:
????????何時(shí)添加注釋是程序員經(jīng)常爭(zhēng)論的一個(gè)話題。一種通行的指導(dǎo)原則是,當(dāng)代嗎不夠清晰時(shí)加注釋,而代碼很明確了時(shí)不應(yīng)當(dāng)添加注釋。
????//????不好的寫法
????//? ? ?初始化 count??
??????????var? count = 10;
????????代碼中初始化count 的操作顯而易見(jiàn)。 如果這個(gè)值10具有特殊的意義,通過(guò)戴拿無(wú)法看出來(lái),這個(gè)是有有必要添加注釋。
????//? ? 好的寫法
????// 改變這個(gè)值可能會(huì)讓它變成青蛙
????????var? count = 10;