附錄 B 雞肋

現(xiàn)在請你告訴我,你究竟為了我哪一點(diǎn)壞處而開始愛起我來呢? --- 威廉·莎士比亞

本附錄中,我們會(huì)展示JS一些有問題的特性,但我們很容易就能避免它們。通過這些簡單的做法,你就可以使JS成為一門更好的語言,也讓你自己成為一個(gè)更好的程序員。

1. ==

==、!= 和 ===、!==

2. with語句

with語句在JS中存在,本身就嚴(yán)重影響了JS處理器的速度,因?yàn)樗柚沽俗兞棵脑~法作用域綁定。它的本意是好的,但如果沒有它,JS語言會(huì)更好一點(diǎn)。

3. eval

eval 函數(shù)傳遞一個(gè)字符串給JS編譯器,并且執(zhí)行其結(jié)果。
使用eval

(1)形式的代碼會(huì)更加難以閱讀。這種形式將使得性能顯著降低,以為它須運(yùn)行編譯器,但也許只是為了執(zhí)行一個(gè)微不足道的賦值語句。
(2)eval函數(shù)還減弱了你的應(yīng)用的安全性,因?yàn)樗o被求值的文本授予了太多的權(quán)力。就像with語句執(zhí)行的方式一樣,它降低了語言的性能。
(3)eval還有個(gè)很大的問題,在eval中定義的變量,會(huì)被全局訪問到。會(huì)造成全局變量污染。

4. continue 語句

移除continue語句,性能改善。

5. switch 貫穿

千萬記住要使用break來中斷流程。

6. 缺少塊語句

比如:

if (ok)
   t = true;
   advance();

看起來,他想要這樣:

if (ok) {
   t = true;
   advance();   
}

但實(shí)際上它本意是:

if (ok) {
   t = true;    
}
advance();

所以,要嚴(yán)格遵守規(guī)范,禁止省略代碼塊。

7. function 語句對比函數(shù)表達(dá)式

function 語句在解析時(shí)會(huì)發(fā)生被提升的情況。這意味著不管 function 被放置在哪里,它會(huì)被移動(dòng)到被定義時(shí)所在作用域頂層。
這放寬了函數(shù)必須先聲明后使用的要求,這樣會(huì)導(dǎo)致混亂。

在if 語句中使用function語句也是被禁止的。

理由如下:

我們先來看一段代碼:

console.log(typeof foo);
function foo(){ return 1; }
console.log(typeof foo);

上面這段代碼在各個(gè)瀏覽器中有一樣的結(jié)果:"function"、"function"。

這是沒有瀏覽器差異的行為,原因是函數(shù)聲明提升(Function Declaration Hoisting)

console.log(typeof foo);

if (true) {
    function foo(){ 
       return 1; 
    }
}

console.log(typeof foo);

上面這段代碼在Gecko引擎中打印"undefined"、"function";而在其他瀏覽器中則打印"function"、"function"。

原因在于Gecko加入了ECMAScript以外的一個(gè)feature:條件式函數(shù)聲明。

條件式函數(shù)聲明跟函數(shù)表達(dá)式的處理方式一樣。因此,條件式函數(shù)聲明喪失了函數(shù)聲明提升的特性。

基于以上原因,請不要在你的代碼里將函數(shù)聲明嵌套在條件語句內(nèi)。

8. 類型的包裝對象

不要使用new Boolean,new Number或new String。
也請避免使用 new Object 和 new Array,可使用{} 和 []來代替

9. new

打算與 new 結(jié)合使用的函數(shù)應(yīng)該命名為首字母大寫的形式,并且首字母大寫的形式應(yīng)該只用來命名那些構(gòu)造函數(shù)

一個(gè)更好的策略是根本不去使用 new 。

10. void

在JS中,void是一個(gè)運(yùn)算符,它接受一個(gè)運(yùn)算符并返回undefined。這沒什么用,而且會(huì)使人迷惑,應(yīng)該避免使用它。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容