每日十條JavaScript經(jīng)驗技巧(一)
1. 不使用script自閉合標(biāo)簽
script中使用自閉合標(biāo)簽,雖然他在XHTML中合法,但是不符合HTML規(guī)范,而且得不到某些瀏覽器的正確解析。我曾經(jīng)就在引入EXT時使用此方式,導(dǎo)致無法正確執(zhí)行腳本。
<script src="example.js"/> --> <script src="example.js"></script>
2. 將腳本放到</body>前面
如果將腳本文件放到<head>中去,則在顯示頁面前先得下載執(zhí)行腳本,增加了用戶等待的時間。樣式表放在<head>中防止內(nèi)容顯示不正常。一般方式如下:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> <link rel="stylesheet" type="text/css" href="theme.css" /> </head> <body> <!-- html代碼 --> <script src="example.js"/> </body> </html>
3. 在函數(shù)內(nèi)使用嚴(yán)格模式
如果在函數(shù)外部使用嚴(yán)格模式,則有可能會使第三方類庫,和同事的代碼不能正常工作,在函數(shù)內(nèi)部則只能影響自己的代碼,不至于影響到別人的代碼。
function myfunction(){ "use strict"; //函數(shù)代碼 }
4. 不要省略語句結(jié)尾的分號
代碼結(jié)尾處沒有分號容易引起壓縮錯誤,另外在某些情況下可以增進(jìn)代碼的性能,應(yīng)為解釋器不比在花時間推測在什么地方插入分號。還有一種更常見的問題就是,自動插入分號有時會出錯,所以并不建議省略分號。
5. 使用var定義變量
定義變量時使用var關(guān)鍵字,并且全部提前至函數(shù)的最開始。
這樣做的好處就會避免無意識的創(chuàng)建出全局變量,而且讓你的代碼更容易理解。
function myfunction(){ var result = 10 + value; var value = 10; return result; }
這個函數(shù)語法上是沒有問題的,但是不是很直觀,不符合人的邏輯,修改如下會更好:
funciton myfunction(){ var result; var value; result = 10 + value; value = 10; return result; }
給大家解釋一下,上面兩個代碼是等價的,result的值都是NAN.JavaScript會把函數(shù)內(nèi)所有的變量聲明提升到函數(shù)的最開始,代碼一在代碼執(zhí)行時會變成代碼二的樣子,當(dāng)運(yùn)行到result = 10 + value;時,value的值為undefined,和10相加為NAN,然后value被賦值為10。
關(guān)于全局變量帶來的問題,大家想必也比較清楚,不然也不會出現(xiàn)命名空間的概念。
6. 函數(shù)先聲明再使用
和變量聲明一樣,函數(shù)聲明也會被JavaScript引擎提前,因此在代碼中,函數(shù)的調(diào)用可以出現(xiàn)在函數(shù)的聲明之前。 還有一點(diǎn)值得注意,函數(shù)聲明不應(yīng)該出現(xiàn)在語句塊之內(nèi),比如:
if (condition) { function myfunction(){ alert("true"); } }else{ function myfunction(){ alert("false"); } } myfunction();
運(yùn)行代碼我們發(fā)現(xiàn)會輸出會和瀏覽器有關(guān),在Chrome 51和Firefox 46輸出true,IE 10下輸出false。所以盡量避免在語句塊中聲明函數(shù)。
7. 慎用typeof underfined null判斷
null是一個特殊值,我們經(jīng)常和undefined混淆,下列場景應(yīng)使用null:
- 用來初始化一個變量,這個變量可能賦值為一個對象。
- 用來和一個已經(jīng)初始化的變量比較。
- 當(dāng)函數(shù)的參數(shù)期望傳入對象時,用作參數(shù)傳入。
- 當(dāng)函數(shù)的返回值期望是對象時,用作返回值傳出。
下面一些情況不應(yīng)該使用null:
- 不要使用null來檢查是否傳入了某個參數(shù)。
- 不要用null來檢查一個變量是不是初始化。
理解null最好的方式是將他當(dāng)做對象的占位符。我們經(jīng)常將null和undefined搞混的原因是我們認(rèn)為null和undefined都是變量未初始化,但是只有undefin代表一個變量還沒有被初始化,null代表初始化為對象??慈缦麓a:
var person; console.log(typeof person); //undefined console.log(typeof foo); //undefined var house = null; console.log(typeof house); //object
所以盡量不要用typeof判斷變量是否初始化,你并不能確定是變量不存在還是變量未初始化,返回null是你也不能確定變量有沒有被正確的賦值,所以小心使用typeof。
8. 小心使用Number類型
想必大家也知道JavaScript整數(shù)支持十進(jìn)制,八進(jìn)制,和十六進(jìn)制的字面值。八進(jìn)制中如果字面值中的數(shù)值超過了范圍,那么前導(dǎo)零將會被忽略,后面的數(shù)值當(dāng)做十進(jìn)制解析。
console.log(012); //10
console.lgo(082); //82
如果將八進(jìn)制和十六進(jìn)制用于小數(shù)則會語法錯誤。還有一點(diǎn),八進(jìn)制字面量在嚴(yán)格模式下是無效的。 關(guān)于浮點(diǎn)數(shù)計算誤差的問題大家也都清楚,凡是基于IEEE754數(shù)值的浮點(diǎn)計算都是這樣,所以永遠(yuǎn)不要測試某個特定的浮點(diǎn)數(shù)值。
在數(shù)值類型中有一個比較特殊的值,NaN(Not a Number),這個數(shù)值用于表示本來應(yīng)該返回數(shù)值但是返回的不是數(shù)值類型。NaN和任何值都不相等,包括NaN本身。我們可以用isNaN()函數(shù)測試。
9. 使用邏輯運(yùn)算動態(tài)賦值
大家比較喜歡的操作
var person={ age:10 } var condition; var myVar = condition && person; alert(myVar)
如果condition轉(zhuǎn)為boolean類型為false,則myVar = condition,若為true,則myVar = person。
var person={ age:10 } var condition; var myVar = condition || person; alert(myVar)
如果condition轉(zhuǎn)換為boolean為true,則myVar = condition,若為false,則myVar = person。
10. 不使用with語句
不使用with的一個重要原因是,在嚴(yán)格模式下語法本身就是禁用with語句的,這也表明ECMAScript委員會確信不應(yīng)使用with。我們看如下例子:
var book = { title : "Maintainable JavaScript", author: "Nicholas C. Zakas" }; var message = "The book is "; with(book) { message += title; message += "by " + author; }
上述代碼的問題在于我們很難分辨title和author出現(xiàn)的位置,也難分辨出message到地址一個局部變量還是book的一個屬性,而且JavaScript引擎和壓縮工具無法對這段代碼進(jìn)行優(yōu)化,應(yīng)為它們無法猜出代碼的正確含義。
好了,已經(jīng)十條了,我們下一個十條再見。
- JS常用函數(shù)和常用技巧小結(jié)
- node.js路徑處理方法以及絕對路徑詳解
- JavaScript中apply方法的應(yīng)用技巧小結(jié)
- Web性能優(yōu)化系列 10個提升JavaScript性能的技巧
- javascript函數(shù)中的3個高級技巧
- JavaScript中Array的實用操作技巧分享
- javascript 四十條常用技巧大全
- jsp編程常用技巧小結(jié)
- 41個Web開發(fā)者必須收藏的JavaScript實用技巧
- 每日十條JavaScript經(jīng)驗技巧(二)
- 靜態(tài)頁面html中跳轉(zhuǎn)傳值的JS處理技巧
- 12個非常實用的JavaScript小技巧【推薦】
- JavaScript奇技淫巧44招【實用】
相關(guān)文章
JavaScript中Array 對象相關(guān)的幾個方法
JavaScript中Array 對象相關(guān)的幾個方法...2006-12-12基于JavaScript 數(shù)據(jù)類型之Boolean類型分析介紹
本篇文章小編為大家介紹,基于JavaScript 數(shù)據(jù)類型之Boolean類型分析介紹。需要的朋友參考下2013-04-04Javascript基礎(chǔ)知識(一)核心基礎(chǔ)語法與事件模型
這篇文章主要介紹了Javascript用途及語法,傳統(tǒng)事件及現(xiàn)代事件,是最近這段時間個人學(xué)習(xí)javascript的一些心得,分享給大家,有需要的朋友可以參考下2014-09-09