新聞中心
[[339224]]

JavaScript使用兩種相等性操作符:===|!==和==|!=。通常認為做比較的最佳實踐是使用前一組操作符。
“若兩個操作數(shù)的類型和值相同,那么===比較的結(jié)果為真,!==比較的結(jié)果為假。”
— JavaScript語言精粹(JavaScript: The Good Parts)
然而,如果使用==和!=,當(dāng)比較不同類型的操作數(shù)時,你就會碰到問題啦。在這種情況下,這組操作符會嘗試對操作數(shù)的值做無用的強制轉(zhuǎn)換。
Eval就是糟糕的代名詞
對于那些不熟悉JavaScript的人來說,函數(shù)”evel”讓我們能夠訪問JavaScript編譯器。我們可以通過給”eval”傳遞一個字符串參數(shù)來得到該字符串執(zhí)行的結(jié)果。
這不僅會極大地降低你的腳本的性能,也會造成一個巨大的安全隱患,因為這賦予傳遞進來的純文本太多的能力。要盡可能地避免eval函數(shù)的使用。
不要懶手
技術(shù)上來說,你確實可能僥幸地省略多數(shù)花括號和分號。大多數(shù)瀏覽器都能夠正確地解釋如下代碼片段:
- if(someVariableExists)
- x = false
然而,再考慮一下這段代碼:
- if(someVariableExists)
- x = false
- anotherFunctionCall();
可能會有人認為上一段代碼等價于:
- if(someVariableExists) {
- x = false;
- anotherFunctionCall();
- }
很不幸,他錯了。事實上,它的本意是:
- if(someVariableExists)
- x = false;
- anotherFunctionCall();
你應(yīng)該也注意到了,代碼中縮進模仿了花括號的功能。
毋庸置疑,這是非常恐怖的做法,無論如何都應(yīng)該避免。唯一可以省略花括號的時候是在一行式的語句中,但即使這種情況,也是很有爭議的。
- if(2 + 2 === 4) return 'nicely done';
始終要想著以后。
如果以后的某個時候,你需要在這種if語句中增加更多的命令,那該怎么辦呢?
沒法子,你就只能重寫這塊代碼了。處理這個問題的底線是對于省略寫法保持謹慎。
使用JS Lint
JSLint是Douglas Crockford編寫的一個調(diào)試器。簡單地將你的腳本拷貝進去,它就會快速地掃描你的代碼中任何明顯的問題和錯誤。
“JSLint獲取一份JavaScript源碼,然后掃描代碼。如果發(fā)現(xiàn)問題,就會返回一條信息描述這個問題以及這個問題在源碼中的大致位置。問題雖然經(jīng)常是語法錯誤,卻不一定是。
JSLint也會查看一些風(fēng)格習(xí)慣以及結(jié)構(gòu)問題。它并不證明你的代碼是否正確,只是提供另外的一雙眼睛來幫助發(fā)現(xiàn)問題?!?/p>
—JSLint文檔
在結(jié)束腳本代碼的編寫之前,對其執(zhí)行一次JSLint,能夠保證你不會犯一些愚蠢的錯誤。
將腳本置于頁面的底部
這條技巧在本系列前面的文章中也推薦過。因為它在此處也非常合適(As it’s highly appropriate though),所有我將那段信息直接粘貼在這里。
記住—這條最佳實踐的主要目標是盡可能快速地為用戶加載頁面。當(dāng)加載一個腳本時,瀏覽器直到整個腳本文件全部加載完畢才能繼續(xù)。
因此,用戶必須等上更長的時間才能注意到任何的進度。
如果JS文件的目的僅僅是增加功能—例如,在點擊某個按鈕后—那么就將那些文件放在底部,body結(jié)束標簽之前吧。這絕對是一個最佳實踐。
更好的做法
And now you know my favorite kinds of corn.


咨詢
建站咨詢