JavaScript將成為計算機學習第一語言
我們主要是教授那些已經(jīng)接受了數(shù)學和科學中心課程的學生。因此我們能夠做一些更加能激發(fā)大家興趣的練習或是項目。
將JavaScript作為***語言是一件非常令人激動的事情。向熟悉傳統(tǒng)繼承方法的開發(fā)者教授原型繼承方法是一件令人沮喪的事情(導致許多詣在復制JavaScript中繼承類的庫如雨后春筍般涌現(xiàn))。向那些沒有接受過任何繼承方法學習的人員介紹原型繼承相對而言會輕松很多。學習函數(shù)型程序設計也是同樣的道理。使用JavaScript也可以體驗到函數(shù)型編程方式,并且也是我們課程的一個關注重點。
在將JavaScript作為***語言之前,還有幾點困難需要克服(這是人們在使用JavaScript時常常會碰到的)。為了避免這些常見的問題,我們需要在代碼編輯器中使用某種形式的linting(JSLint或是JSHint,又或是其他類似的東西),用來告訴用戶環(huán)境信息。
我們希望避免傳統(tǒng)的語法教學方法,讓大家能夠通過使用這門語言更加容易地掌握它。這里有兩個突出的改變,用來簡化學習的過程。
注意:只有當學習者是那些從來沒有接觸過任何編程語言、相關規(guī)范、代碼和庫的人,這些特別建議才能真正有效。當然,如果需要提升學生的層次,讓他們能夠“看到任何一個跨瀏覽器的JavaScript代碼,都能理解代碼的含義”,還有許多工作要做。
強制類型轉(zhuǎn)換
正如許多人指出的,強制類型轉(zhuǎn)換是一件很混亂的事情,這一點Douglas Crockfor在JavaScript: The Good Parts中特別提到過。
可以在學習了其他的課程以后再來討論這個問題…比如學習了原型,函數(shù)程序設計和閉包之后。

我推薦***個改變就是只讓學生使用===(和!==)。雖然使用‘==’在語法上比較短,但是它有許多強制類型轉(zhuǎn)換的限定和用法,在初步學習編程以前教授這些內(nèi)容沒有太大的意義。
一個例外的情況是,如果你需要檢查一個變量是否是一個null或者是一個未定義的值。這可以通過一個簡單的someVar == null示例帶過,這也是唯一使用==的地方。(另一個例外是在IE中的瀏覽器bug,用===檢查Windows對象總是返回false,但是我們并不會在我們的課程中介紹這個例子。)
Falsy值
和==一樣,falsy值也肯能引起混亂。進行嚴格的布爾檢查將減少邊緣效應,但是會增加代碼量??梢詫alsy值限定為布爾值,null和未定義的數(shù)值,而將字符串falsy值留給大家以后學習。
函數(shù)聲明
其中最有趣的改變是一個很微妙的變換,它避開了創(chuàng)建匿名函數(shù)和為他們指定變量時的函數(shù)聲明。

使用這個技巧能培養(yǎng)一些好的習慣。
更易于理解“函數(shù)即對象”。我發(fā)現(xiàn)當你將一個指定了變量的函數(shù)展示給開發(fā)者時,他們更容易理解函數(shù)就是一個對象(以及一個函數(shù)可以作為一個參數(shù)傳遞給另一個函數(shù))。學生們能夠更好地理解函數(shù)程序設計。
它能夠形成良好的分號使用習慣。只有在傳統(tǒng)的函數(shù)聲明中不需要使用分號結束(當然,還包括條件語句和循環(huán)語句),這樣學生對于應該如何使用分號就相當清晰了。
不要有太多與功能函數(shù)和循環(huán)有關的包,
塊作用域
這是***一個具有挑戰(zhàn)的知識點,目前為止我還沒有找到一個特別好的教學方案。光是弄清楚在循環(huán)內(nèi)聲明的變量就已經(jīng)令開發(fā)者非常頭疼了。如果無法更加直觀地解釋變量聲明的作用域的話,就只能從純粹的技術角度來解釋了。
(但是我還不確定是否應該在一開始就介紹function(){…}();這樣的函數(shù)塊。)
將JavaScript作為***語言
需要指出的是盡管我們準備將JavaScript作為***語言——主要是由于它具有普遍性,符合大量工作環(huán)境的需求,無需事先安裝,開發(fā)的內(nèi)容可以分享——但我們不會將眼光只局限在JavaScript上。還有許許多多的其他語言也是非常重要的,從這些語言里面能學到許多在JavaScript中沒有的技巧,我們也應該將這些內(nèi)容加入到我們的課程中來。
在視頻中介紹了更多關于我們選擇JavaScript的原因,以及我們開發(fā)中支持的瀏覽器介紹。
我盡量避免跨瀏覽中出現(xiàn)的各種特殊問題。因此我們會盡量使用現(xiàn)有的庫(如繪制canvas或是操縱DOM),只有在與我們最終支持的瀏覽器一致的情況下才會使用JavaScript語言的功能。
作者簡介:John Resig是Open Source的院長,以及Khan Academy的JavaScript開發(fā)組長,出版了Pro JavaScript Techniques,他還參與了 jQuery JavaScript library的開發(fā)并且擔任了領導工作。
目前,John在Boston, MA,并在準備他的第二本書Secrets of the JavaScript Ninja。
原文:http://www.webapptrend.com/2011/12/1245.html
【編輯推薦】