原文中還穿插了許多連結. 這人在stackoverflow上似乎浸淫已久...
http://stackoverflow.com/questions/2628672/what-every-javascript-programmer-should-know/2629004#2629004
架構的确好用, 不過他們也隐藏了JavaScript中醜陋的細節和DOM的運作機制. 如果你的目标是敢于自稱"我懂JavaScript", 那麼花時間學習架構無異于南轅北轍.
下面這些JavaScript語言特性你應該熟記在心并避免被他們困擾, 然而多數人可能對此還不熟悉.
- object.prop和object['prop']是一回事. (是以咱能不用eval麼, 謝謝嗷); 對象的屬性名都是以字元串來索引的, 連數組的下标都是; for...in能拿來幹啥, 不能幹啥.
- 屬性檢測; undefined是個啥(及其肮髒之處); 不出名的in操作符有何優勢, 它與typeof/undefined有何不同; hasOwnProperty方法; delete操作符的作用
- Number類型本質上隻是浮點類型; 語言無關地使用浮點類型的困難所在; 避免parseInt方法的八進制陷阱
- 潛逃函數的變量作用域; 為避免産生全局變量而使用var關鍵字的必要性; 作用域與閉包的結合應用; 某個經典的閉包與循環的問題
- 全局變量與window對象的屬性其實是一回事; 全局變量與DOM對象在IE中的命名沖突問題; 以及使用var來規避此類問題.
- function語句被提升的機理, function語句與function表達式的差別; 為什麼避免使用具名函數表達式.
- 建構函數, prototype屬性, new關鍵字的工作機制; 在此基礎上實作一個基本的類-子類-執行個體OO系統; 何時考慮使用基于閉包的對象來取代原型.(一般的JS教程這裡講的都很渣, 我花了好幾年才真正了解)
- this關鍵字在函數調用時确定而非函數定義時; 傳入作為參數函數為什麼不像其他語言那樣正常工作; 如何用Function.prototype.bind來解決這個問題.
- ES5引入的新語言特性, 如indexOf, forEach等; Array類的函數式程式設計方法; 如何為舊浏覽器引入這些方法; 用匿名函數調用這些方法來提高代碼可讀性.
- 浏覽器與JS的控制流程交換機理; 同步與異步執行; 運作中主動觸發的事件與真的事件間的差別, 以及timeout的機制; 調用同步執行的方法(比如alert)可能造成的控制流重進入的潛在異常;
- 跨window程式設計中instanceof潛在的問題以及不同文檔間控制流程是怎樣互相影響的; postMessage會如何解決該問題.
這裡絕大多數問題都需要你批判性地看待JavaScript, 了解它由于曆史原因而遺留下來的種種不完美(一般來說比别的語言都要糟糕), 并學會規避這些陷阱. Douglas Crockford在這方面的研究很值得一讀(雖然我并非100%同意他的"語言精粹")
轉載于:https://www.cnblogs.com/hwgg/archive/2012/03/28/2421155.html