那些相見恨晚的 JavaScript 技巧

JavaScript 的成功讓人津津樂道,爲 Web 網頁編寫 JavaScript 代碼已是全部 Web 設計師的基本功,這門有趣的語言蘊藏着許多不爲人熟知的東西,即便多年的 JavaScript 程序員,也未能徹底吃透。本文從7個方面講述 JavaScript 中那些你不很熟知但很是實用的技巧。程序員

簡略語句

JavaScript 可使用簡略語句快速建立對象和數組,好比下面的代碼:json

可使用簡略語句以下:數組

對象 car 就此建立,不過須要特別注意,結束花括號前必定不要加 ";" 不然在 IE 會遇到很大麻煩。瀏覽器

建立數組的傳統方法是:緩存

使用簡略語句則:框架

另外一個可使用簡略語句的地方是條件判斷語句:函數

 

能夠簡略爲:網站

JSON 數據格式

JSON 是 "JavaScript Object Notation" 的縮寫,由 Douglas Crockford 設計,JSON 改變了 JavaScript 在緩存複雜數據格式方面的困境,以下例,假如你要描述一個樂隊,能夠這樣寫:ui

你能夠在 JavaScript 中直接使用 JSON,甚至做爲某些 API 的返回數據對象,如下代碼調用著名書籤網站delicious.com 的一個 API,返回你在該網站的全部書籤,並顯示在你本身的網站:設計

JavaScript 本地函數 (Math, Array 和 String)

JavaScript 有不少內置函數,有效的使用,能夠避免不少沒必要要的代碼,好比,從一個數組中找出最大值,傳統的方法是:

使用內置函數能夠更容易實現:

另外一個方法是使用 Math.max() 方法:

你能夠用這個方法幫助探測瀏覽器

這解決了 IE 瀏覽器的一個問題,經過這種方法,你老是能夠找到那個正確的值,由於瀏覽器不支持的那個值會返回 undefined。

還可使用 JavaScript 內置的 split() 和 join() 函數處理 HTML 對象的 CSS 類名,若是 HTML 對象的類名是空格隔開的多個名字,你在爲它追加或刪除一個 CSS 類名的時候須要特別注意,若是該對象尚未類名屬性,能夠直接將新的類名賦予它,若是已經存在類名,新增的類名前必須有一個空格,用傳統的 JavaScript 方法是這樣實現的:

使用 split 和 join 方法則直觀優雅得多:

事件代理

與其在 HTML 文檔中設計一堆事件,不如直接設計一個事件代理,舉例說明,假如你有一些連接,用戶點擊後不想打開連接,而是執行某個事件,HTML 代碼以下:

傳統的事件處理是遍歷各個連接,加上各自的事件處理:

使用事件代理,能夠直接處理,無需遍歷:

匿名函數與 Module 模式

JavaScript 的一個問題是,任何變量,函數或是對象,除非是在某個函數內部定義,不然,就是全局的,意味着同一網頁的別的代碼能夠訪問並改寫這個變量(ECMA 的 JavaScript 5 已經改變了這一情況 - 譯者),使用匿名函數,你能夠繞過這一問題。

好比,你有這樣一段代碼,很顯然,變量 name, age, status 將成爲全局變量

爲了不這一問題,你可使用匿名函數:

若是這個函數不會被調用,能夠更直接爲:

若是要訪問其中的對象或函數,能夠:

這就是所謂 Module 模式或單例模式(Singleton),該模式爲 Douglas Crockford 所推崇,並被大量應用在Yahoo User Interface Library YUI 。

假如你想在別的地方調用裏面的方法,又不想在調用前使用 myApplication 這個對象名,能夠在匿名函數中返回這些方法,甚至用簡稱返回:

代碼配置

別人使用你編寫的 JavaScript 代碼的時候,不免會更改某些代碼,但這會很困難,由於不是每一個人都很容易讀懂別人的代碼,與其這樣,不如建立一個代碼配置對象,別人只須要在這個對象中更 改某些配置便可實現代碼的更改。這裏有一篇 JavaScript 配置對象詳解 的文章,簡單說:

  • 在代碼中建立一個叫作 configuration 的對象
  • 裏面保存全部能夠更改的配置,如 CSS ID 和類名,按鈕的標籤文字,描述性文字,本地化語言設置
  • 將該對象設置爲全局對象,以便別人直接訪問並改寫

你應當在最後一步作這項工做,這裏有一個文章,交 付代碼前的5件事 值的參考。

同後臺交互

JavaScript 是一門前臺語言,你須要別的語言同後臺交互,並返回數據,使用 AJAX,你可讓 JavaScript 直接使用同後臺的交互,將複雜的數據處理交由後臺處理。

JavaScript 框架

本身編寫適應各類瀏覽器的代碼是徹底浪費時間,應當選擇一個 JavaScript 框架,讓這些複雜的事情交給框架處理。

更多資源

延伸閱讀

相關文章
相關標籤/搜索