圖書信息
作 者: 月影 著
出 版 社: 清華大學出版社出版時間: 2008-7-1
字 數: 1347000
版 次: 1
頁 數: 712
開 本: 16開
I S B N : 9787302173083
分類: 圖書 >> 計算機/網路 >> 程式設計 >> Java Java Script J2EE
定價:¥82.00(現噹噹網68.80)
編輯推薦
腳本神力與你同在,無憂版主月影力作。
這是一本尋求JavaScript解決之道的書,這是一本探尋程式設計思想本源的“魔法典籍”,從簡單的語言基礎到豐富的實際套用再到語言本質的深入剖析,字裡行間包含作者對JavaScript實踐乃至程式設計思想的深入思考和總結。腳本攻擊就在黎明發起。
內容簡介
你手中的這本《JavaScript王者歸來》不僅是一本傳播知識的書,更是一本求道的書。
本書是你進入腳本王國的一把鑰匙,引導你領略腳本魔法的神奇魅力。它還是一本著眼於未來改變網際網路的啟蒙讀物,在它的引領下,你將在網際網路的世界裡獲得你所希望得到的知識、智慧、成就和快樂。
作者簡介
吳亮,(網名月影),早年曾在微軟亞洲研究院做過訪問學生、在金蝶軟體有限公司先後擔任過核心開發工程師、設計師和項目經理,現任百度電子商務事業部Web開發項目經理。多年來致力於JavaScript技術和Web標準的推廣,活躍於國內極有影響力的JavaScript專業網站——無憂腳本,並任JavaScript版的版主。平時熱愛文學、寫作和圍棋。
圖書目錄
第一部分 概論
第1章 從零開始
1.1 為什麼選擇JavaScript?
1.2 JavaScript的套用範圍
1.3 JavaScript的版本
1.4 一些值得留意的特性 禁忌及如何突破這些禁忌
1.5 安全性和執行效率
1.6 一個例子--JavaScript編寫的計算器
1.7 學習和使用JavaScript的幾點建議
1.8 關於本書的其餘部分
第2章 瀏覽器中的JavaScript
2.1 嵌入網頁的可執行內容
2.2 賞心悅目的特效
2.3 使用JavaScript來與用戶互動
2.4 繞開腳本陷阱 2.5 總結
第3章 開發環境和調試方法
3.1 我能用什麼來編寫腳本--適合編寫JavaScript的文本編輯器
3.2 來自瀏覽器的支持
3.3 集成開發環境
3.4 調試工具--提升開發效率的利器
3.5 定位代碼和調用堆疊
3.6 瀏覽器捕獲異常
3.7 總結
第二部分 JavaScript核心
第4章 語言結構
4.1 JavaScript的基本文法
4.2 常量和變數
4.3 表達式和運算符符
4.4 控制語句 句
4.5 總結
第5章 數據類型
5.1 基本數據類型
5.2 數組和對象
5.2.1 數組
5.2.2 對象--一個構造函式的例子
5.3 函式類型--一個函式和閉包的例子
5.4 神奇的null和undefined
5.4.1 null
5.4.2 undefined--獨一無二的類型
5.5 正則表達式
5.5.1 正則表達式常量
5.5.2 正則表達式對象
5.6 值類型和引用類型
5.6.1 什麼是值和值的引用
5.6.2 使用值和使用引用
5.6.3 值與引用的相互轉換:裝箱和拆箱
5.7 類型識別與類型轉換
5.7.1 運行時類型識別--兩個運行的類型識別的例子
5.7.2 類型的自動轉換及其例子
5.7.3 強制類型轉換及其例子
5.7.4 高級用法--一個自定義類型轉換的例子
5.8 警惕數值陷阱
5.8.1 困惑--浮點數的精度問題
5.8.2 誤差的修正及其例子
5.9 總結
第6章 函式
6.1 函式定義和函式調用
6.1.1 函式的定義
6.1.1.1 聲明式函式定義與函式表達式及其例子
6.1.1.2 JavaScript函式的奧妙——魔法代碼
6.1.2 函式的調用
6.2 函式的參數
6.2.1 形參與實參
6.2.2 Arguments對象
6.2.2.1 一個使用Arguments對象檢測形參的例子
6.2.2.2 一個使用Arguments對象接收任意個數參數的例子
6.2.2.3 一個使用Arguments對象模擬函式重載的例子
6.2.3 參數類型匹配--一個利用arguments實現函式重載機制的例子
6.3 函式的調用者和所有者
6.3.1 函式的調用者
6.3.2 函式的所有者--一個為函式指定所有者的例子
6.3.3 動態調用--外來的所有者
6.4 函式常量和閉包
6.4.1 匿名的函式
6.4.2 函式引用
6.4.3 函式參數和函式返回值及其例子
6.4.4 高級用法--閉包作為局部域與延遲求值
6.5 高級抽象--Function類型和函式模版
6.5.1 動態創建函式--一個利用Function實現Lambda運算元的例子
6.5.2 模式--函式工廠及其實例
6.6 總結
第7章 對象
7.1 什麼是對象
7.2 對象的屬性和方法
7.2.1 對象的內置屬性
7.2.2 為對象添加和刪除屬性
7.2.3 反射機制--枚舉對象屬性
7.3 對象的構造
7.3.1 構造函式--一個雙精度浮點數封裝類的例子
7.3.2 預設構造和拷貝構造
7.3.3 對象常量
7.4 對象的銷毀和存儲單元的回收
7.5 JavaScript的內置對象
7.5.1 Math對象
7.5.2 Date對象--創建一個簡單的日曆
7.5.3 Error對象
7.5.4 其他內置對象
7.5.5 特殊的對象--全局對象與調用對象
7.6 總結
第8章 集合
8.1 數組和數組元素
8.1.1 數組的構造
8.1.2 數組常量
8.1.3 數組元素
8.2 數組對象和方法
8.2.1 查找元素
8.2.2 添加和刪除元素
8.2.3 集合操作及其範例
8.2.3.1 join()方法
8.2.3.2 reverse()方法
8.2.3.3 sort()方法
8.2.3.4 concat()方法
8.2.3.5 slice()方法
8.2.3.6 splice()方法
8.2.3.7 toSgring()方法和toLocaleString()方法
8.3 哈希表
8.3.1 什麼是哈希表
8.3.2 哈希表的構造
8.3.3 實現一個簡單的HashTable類型
8.4 高級用法--集合操作和閉包
8.5 總結
第9章 字元串
9.1 字元串的構造
9.1.1 字元串常量
9.1.2 轉義序列
9.1.3 字元串構造函式
9.2 字元串的使用
9.2.1 比較字元串
9.2.2 抽取和檢索子串
9.2.3 連線拆分字元串
9.2.4 字元串的模式匹配--一個字元串格式校驗的例子
9.2.5 其他方法
9.3 字元串與字元數組
9.4 字元串與文本處理--JavaScript棋譜閱讀器(一)
9.4.1 需求分析--什麼是棋譜和棋譜閱讀器
9.4.2 系統設計--棋譜和棋盤數據的字元串描述
9.4.3 系統實現--解析和處理棋譜
9.4.4 完整的棋譜閱讀器
9.5 總結
第10章 正則表達式
10.1 什麼是正則表達式
10.1.1 正則表達式的概念
10.1.2 JavaScript中的正則表達式
10.2 正則表達式的規則
10.2.1 直接量字元
10.2.2 字元類和布爾操作
10.2.3 重複
10.2.4 選擇、分組和引用
10.2.5 指定匹配的位置
10.2.6 標誌——高級模式匹配的規則
10.3 模式匹配
10.3.1 用於模式匹配的String方法及其例子
10.3.2 用於模式匹配的RegExp方法
10.3.2.1 一個使用exec()方法從身份證號碼獲取生日的例子
10.3.2.2 一個使用test()方法遍歷字元串的例子
10.4 關於正則表達式包裝對象
10.4.1 RegExp對象——利用正則表達式實現全文檢索
10.4.2 RegExp的實例屬性
10.5 強大的正則表達式
10.5.1 分析正則表達式的局部
10.5.2 一個例子--強大的線上編輯器
10.5.3 構造新的文法--一個在JSVM中實現JSVM2解析器的例子
10.6 高級用法
10.7 用正則表達式處理文本
10.7.1 創建一個計價公式編輯器
10.7.1.1 需求分析--什麼是計價公式編輯器
10.7.1.2 系統實現--計價公式編輯器的實現
10.7.2 創建一個同步滾動歌詞播放器
10.7.2.1 需求分析--什麼是同步滾動歌詞播放器
10.7.2.2 系統設計與實現--處理LRC歌詞
10.8 總結
第三部分 瀏覽器與DOM
第11章 瀏覽器對象
11.1 Window對象--最基本的瀏覽器對象
11.1.1 Window對象概覽
11.1.2 Window對象的生命周期
11.1.3 Window對象的屬性和方法
11.1.4 一個多視窗套用的例子
11.2 document對象--瀏覽器視窗文檔內容的代表
11.2.1 Document對象概覽
11.2.2 動態生成的文檔
11.2.3 Document對象的基本信息
11.2.4 Document對象的外觀屬性
11.2.5 Document子對象接口
11.2.5.1 一個遍歷Anchors對象的例子
11.2.5.2 一個顛倒圖片的例子
11.3 對話框和狀態欄
11.3.1 創建一個簡單對話框
11.3.2 其他類型的對話框
11.3.2.1 模擬對話框--創建一個視窗對話框及一個對話框阻塞進行的例子
11.3.2.2 showModalDialog和showModelessDialog--非W3C或ECMAScrip標準
11.3.3 狀態欄
11.4 框架--上層的Window對象
11.4.1 多框架套用
11.4.2 框架之間的關係
11.4.3 框架的命名
11.4.4 子框架中的JavaScript
11.4.5 框架的套用--多頁簽顯示
11.4.5.1 什麼是頁簽
11.4.5.2 頁簽的實現--創建一個包含頁簽的頁面
11.5 表單和表單對象
11.5.1 Form對象及其範例
11.5.2 定義表單元素
11.5.3 客戶端表單校驗及其例子
11.5.4 創建一款通用的客戶端表單校驗組件
11.6 其他內置對象
11.6.1 Navigator對象--瀏覽器總體信息的代表
11.6.2 Screen對象--提供顯示器解析度和可用顏色數量信息
11.6.3 Location對象--當前視窗中顯示文檔的URL的代表
11.6.4 History對象--一個有趣的對象
11.7 總結
第12章 文檔對象模型
12.1 什麼是DOM
12.1.1 把文檔表示為樹
12.1.2 樹的節點
12.1.3 DOM對象的通用屬性和方法
12.1.4 HTML結構和DOM對象的關係--用JavaScript通過DOM來操作HTML文檔
12.2 DOM與瀏覽器實現
12.2.1 關於DOM HTML API
12.2.2 DOM的級別和特性
12.2.3 DOM的一致性
12.2.4 差異性--瀏覽器的DOM方言
12.3 一組“盒子”--DOM元素
12.3.1 嵌套的“盒子”
12.3.2 “盒子”和“盒子”內容的分類
12.4 創建和刪除節點
12.4.1 構造全新的節點
12.4.2 平面展開--通過文檔元素直接創建
12.4.3 回收空間--刪除不用的節點
12.5 訪問和操縱DOM節點
12.5.1 打開每一個盒子--遍歷節點
12.5.2 弄清層級關係--父子與兄弟
12.5.3 如何搜尋特定節點
12.5.4 克隆節點--一個使用cloneNode()複製表格的例子
12.5.5 移動節點及其範例
12.5.6 關於添加新行和排序的小技巧
12.6 讀寫數據--添加、修改和刪除屬性
12.7 外觀與行為
12.7.1 DOM樣式屬性
12.7.2 控制DOM元素的顯示與隱藏
12.7.3 改變顏色和大小--一個簡單有趣的例子
12.7.4 改變位置--創建一個繞圓圈旋轉的文字
12.7.5 編輯控制及其範例
12.7.6 改變樣式及其範例
12.7.7 改變行為
12.8 XML DOM
12.8.1 什麼是XML DOM
12.8.2 如何使用XML DOM--一個利用XML實現多級關聯下拉選擇框的例子
12.9 總結
第13章 事件處理
13.1 什麼是事件
13.1.1 訊息與事件回響
13.1.2 瀏覽器的事件驅動機制
13.2 基本事件處理
13.2.1 事件和事件類型
13.2.2 事件的綁定
13.2.3 直接調用事件處理函式
13.2.4 事件處理函式的返回值
13.2.5 帶參數的事件回響及其例子
13.2.6 “this”關鍵字
13.3 標準事件模型
13.3.1 起泡和捕捉--瀏覽器的事件傳播
13.3.2 事件處理函式的註冊
13.3.3 把對象註冊為事件處理程式
13.3.4 事件模組和事件類型
13.3.5 關於Event接口
13.3.5.1 Event接口的屬性和方法
13.3.5.2 UIEvent接口的屬性
13.3.5.3 MouseEvent接口的屬性
13.3.5.4 MutationEvent接口
13.3.6 混合事件模型
13.3.7 合成事件
13.4 瀏覽器的事件處理模型實現
13.4.1 Internet Explorer事件模型
13.4.1.1 關於IE事件註冊
13.4.1.2 IE event對象的屬性
13.4.1.3 IE中的事件起泡
13.4.2 Netscape 4事件模型
13.4.2.1 Netscape 4中的事件捕捉及其範例
13.4.2.2 Netscape 4 Event對象的屬性
13.5 回調與用戶自定義事件
13.5.1 事件處理模式--一個實現簡單事件處理模式的例子
13.5.2 用戶事件接口的定義
13.5.3 事件代理和事件註冊--一個實現標準事件接口的例子
13.5.4 標準模式--事件分派和接收
13.6 一個例子--增強數據表格
13.6.1 什麼是增強數據表格
13.6.2 一個採用兩重table嵌套方式固定表頭的例子
13.6.3 可變列寬的實現
13.6.4 標記行--呈現有別於其他行的背景色
13.6.5 小技巧--將代碼添加到樣式表
13.7 總結
第14章 級聯樣式表
14.1 什麼是級聯樣式表
14.1.1 CSS樣式和樣式表
14.1.2 CSS的標準化
14.1.3 瀏覽器支持的CSS
14.2 JavaScript與CSS
14.2.1 CSS和DOM的關係
14.2.2 CSS和IE的關係
14.2.3 瀏覽器的CSS兼容性
14.3 控制CSS改變頁面風格
14.3.1 實現結構與表現的分離及其範例
14.3.2 使用JwaScript和CSS實現頁面多種風格的實時替換
14.4 總結
第15章 數據存儲的腳本化
15.1 什麼是cookie
15.1.1 瀏覽器和客戶端cookie
15.1.2 cookie的屬性
15.2 cookie的客戶端存取
15.2.1 cookie的存儲
15.2.2 cookie的讀取
15.3 cookie的限制
15.4 cookie示例--讓問候更加溫暖
15.5 cookie對象的封裝
15.6 什麼是userData
15.6.1 瀏覽器和客戶端userData
15.6.2 userData的聲明
15.6.3 userData的屬性和方法
15.7 userData的客戶端存取
15.7.1 userData的存儲和讀取
15.7.2 userData的安全性
15.8 userData的限制
15.9 userData與cookie的對比
15.10 userData示例--一個利用userData實現客戶端保存表單數據的例子
15.11 總結
第四部分 數據互動
第16章 同步和異步
16.1 什麼是同步和異步
16.2 逾時設定和時間間隔
16.3 定時器使用--偵聽與攔截
16.3.1 標準模式--監視器及其範例
16.3.2 使用定時器時應當注意的問題
16.4 一個例子--漂亮的Web時鐘
16.4.1 什麼是Web時鐘?
16.4.2 最簡單的Web時鐘
16.4.3 Web時鐘的設計
16.4.4 完整的Web時鐘原始碼
16.5 總結
第17章 XML DOM和XML HTTP
17.1 什麼是XML DOM對象
17.1.1 XML DOM簡介
17.1.2 瀏覽器支持的XML DOM接口
17.1.2.1 XML DOM標準接口
17.1.2.2 IE的XML DOM組件
17.1.2.3 操作XML文檔--一個使用MSXML操作XML文檔的例子
17.2 XML DOM的版本兼容性--XML DOM的跨瀏覽器套用
17.3 XML DOM的錯誤處理
17.3.1 處理錯誤信息的ParseError對象
17.3.2 包含錯誤信息的文檔
17.4 XML DOM操作XML文檔
17.4.1 訪問節點
17.4.2 創建新節點
17.4.3 移動和修改節點及其範例
17.4.4 讀寫節點屬性和讀寫數據
17.4.5 保存文檔
17.5 一個例子--JavaScript棋譜閱讀器(二)
17.5.1 用XML描述棋譜
17.5.2 將XML棋譜轉換為sgf棋譜
17.6 什麼是XML HTTP對象
17.6.1 XML HTTP對象簡介
17.6.2 瀏覽器支持的XML HTTP對象
17.7 通過XML HTTP傳送請求
17.7.1 建立連線
17.7.2 傳送請求
17.8 讀取和設定HTTP頭
17.8.1 什麼是HTTP頭
17.8.2 讀取和設定HTTP頭
17.9 伺服器應答
17.9.1 同步和異步應答及其例子
17.9.2 包含應答文本內容的ResponseText 和ResponseXML
17.10 總結
第18章 Ajax簡介
第19章 標準和兼容性
第20章 信息安全
第五部分 超越JavaScript
第21章 面向對象
第22章 閉包與函式式編程
第23章 模組級管理
第24章 動態構建
第25章 執行效率
25.1 為什麼要討論執行效率
25.2 封閉的代價
25.3 盒子裡的流火
25.4 動態--魔鬼與天使
25.5 讓代碼輕舞飛揚
25.6 總結
第26章 套用框架
26.1 套用框架概覽
26.2 為什麼要設計套用框架
26.3 如何設計套用框架
26.4 框架的實際套用--在Silverna 2.0框架上開發的Widgets
26.5 已存在的套用框架
26.6 總結
圖書章節
前言你好,很高興你能翻開這本書——《JavaScript王者歸來》。.
書名中的“王者”,並不是指我這個作者,而是指你們——偶然地停下來,饒有興趣地翻閱這本書的每一位讀者。正是你們對JavaScript和Web開發的濃厚興趣和熱情,使得Web領域發生了和正在發生著翻天覆地的變化,也使得我有信心和毅力去完成這樣一本厚厚的書。所以,這本書,是獻給你們的,現在的和將來的JavaScript王者們!
這是一本什麼樣的書呢?作為作者,我很希望它能成為一本帶著神奇力量的魔法書,能夠將你對技術的興趣,轉化為神奇的魔力,幫助你在Web套用中寫出不可思議的奇蹟般的漂亮代碼。當然,也許這只是我的一個美好的願望,但是如果你是帶著興趣和熱情來讀這本書,並且願意和我一起探尋JavaScript王國的奧秘,那么,這本書中一定有著能讓你著迷的東西。
JavaScript是一位美麗而又難以捉摸的叢林女神,她乾淨利落而又變化多端,她的美麗能夠帶給你喜悅和幸福感,她的善變,卻又讓你深深地陷入困惑之中。有時候,你本能地想逃避她,內心裡又離不開她。你覺得她單純,可是你看不透她,你覺得她難以捉摸,可是她卻偏偏又有著簡單乖巧的一面。這樣的一種語言,是充滿魅力的魔法精靈,難道你就不想看清她的真面目,讀懂她,讓她幫助你創造出激動人心的神跡嗎?來吧,翻開這本書,你的願望能夠實現。
如果你是一位剛剛接觸到豐富多彩的Web世界,希望自己也能夠製作出那些美麗多彩的頁面的人,那么請相信我,這本書是為你準備的,通過閱讀它,能夠使你具備創建和駕馭屬於你自己的Web國度的能力。
如果你是一位偶然地在瀏覽器頁面代碼中發現一小段包含在[script]標記之間的小腳本,並且希望弄明白它的人,那么請相信我,這本書是為你準備的,如果你有耐心讀完它,你將能夠自由地讓你的意志在[script]標記之間飛揚。
如果你是一位迷失在無數腳本和特效之間的旅行者,那么請相信我,這本書是為你準備的。來和我一起在Web的湖泊中暢遊吧,我必將帶你離開迷宮和陷阱,讓你看到腳下的這個王國是多么的美好,你將成為一位英明的王,而不再是無助的迷路人。
如果你是一位飽受腳本困擾的程式設計師,那么請相信我,這本書是為你準備的,請和我一起打開纏繞在你心頭的枷鎖,你會發現你手中握著的是一把神奇的利刃,這把神兵將不再割傷你自己,而是被你支配,成為在Web世界裡助你開拓疆土的神器。
如果你是一位在腳本泥潭中掙扎的項目經理,那么請相信我,這本書也是為你準備的,我發誓我有能力帶你離開我自己曾經掙扎過的地方,當你離開了陷阱,你將發現以前你無暇顧及的世界,原來是那么的美好。
所有翻開了這本書並喜愛著JavaScript的讀者們,願腳本神力與你們同在!
關於著作權
本書中的部分內容來自於網路上公開的文章,所有有出處的文字都儘量標註出原始的出處,包括原文作者、首發網址和譯者。引用為例子的代碼在儘可能的情況下得到作者本人的同意。如果對這部分內容有任何疑義,請及時與作者聯繫。
本書中的部分文字參考或者直接引用了《Javascript權威指南》第四版,作者David Flanagan,譯者張銘澤等,O’REILLY授權機械工業出版社2006年9月出版。凡是明確引用此書內容和參考此書內容的部分,筆者也在書中儘量註明(正文中統一用【1】來表示),如果因為引用原文內容而產生的任何問題,請及時與作者聯繫。
書中相關章節的表格(表 XX.AA)大多數來源於《JavaScript權威指南》和網際網路,在正文裡不再做一一說明,如果對此有任何疑義,請及時與作者聯繫。
致謝..
雖然這幾年來我一直致力於推廣JavaScript技術和Web標準,但是如果離開了時時刻刻支持和鼓勵著我的朋友們,這樣一本涉及到JavaScript方方面面的書,以我個人微不足道的力量是不可能完成的。這本書的面市凝聚著無數關心我的朋友們的心血,他們中的一些人是我的同事,另一些人是我在無憂腳本結識的夥伴,還有許許多多通過網路聯繫的未曾謀面的朋友。他們的每一分鼓勵、每一個思想、和每一點意見都是我創作的靈感和力量的源泉,沒有他們,就永遠也不會有這樣一本出自我手的書,在此我要向他們表示由衷的感謝。
我在金蝶工作的同事在我寫這本書的時候,不但為我提出了各種建議,而且毫無怨言地分擔了我的工作,體貼地為我留出足夠的創作時間。在這裡我要感謝jimi、張錦、小陸、阿日、建新、大琴、老丁、謝汀以及其他的和我共同奮鬥的金蝶MOP團隊的兄弟姐妹,謝謝你們的努力工作,謝謝你們對我的默默支持。
我創作這本書的大量靈感來源於我和無憂腳本以及csdn論壇上的朋友們的交流。我們總是一起探討關於腳本的深入話題,有時候達成一致意見,也有時候產生分歧甚至激烈的爭執。靈感的火花總是在思維碰撞中產生的,和你們的討論讓我學到了很多東西,也直接地決定了這本書的內容組織和觀點形成。在此,我要感謝所有在無憂腳本和CSDN結識的JS高手們,感謝幻宇、寶玉、梅花雪、周愛民、萬常華、海浪、梅雪香、dron、stone、劉傑、biyuan、泣紅亭、winter和asfman以及其他所有和我一起討論共同進步的JSers們,謝謝你們。
我在04年從學校里畢業的時候,還對JavaScript一無所知,我自學JavaScript使用的第一本教材就是David Flanagan的《JavaScript權威指南》,如果沒有這本出色的教材,我可能永遠也不會對JavaScript有今天這種程度的理解。本書的基礎部分的許多基本概念、觀點和結論,也和《JavaScript權威指南》保持一致。在此感謝David Flanagan、Brendan Eich和《JavaScript權威指南》,沒有你們的幫助,也許我現在還是一位JavaScript的門外漢。
這是我寫的第一本技術類的書,在此之前,我完全沒有創作教程的經驗,是我的編輯陳冰鼓勵我創作這本書。而且在我撰寫這本書的一年裡,他耐心細緻地閱讀了我每一章節的稿件,提出了許多意見和建議,並一次又一次地督促我改進稿件,直至最終完成。如果沒有陳凍的耐心指導和幫助,我永遠也寫不出這樣一本書。
. Web技術的飛速發展使得JavaScript這門腳本語言日漸被人們所重視,Web標準化工作的推進,也使得JavaScript變得越來越完善和優美,也變得越來越神奇。在這裡我要感謝所有為Web技術發展做出貢獻的技術人員,沒有你們的努力,就沒有JavaScript生存和發展的土壤。感謝W3C和ECMA組織孜孜不倦地進行的標準化工作,如果沒有這些努力,JavaScript也許到今天仍然只是Web舞台一個不起眼的角落裡的小配角。
最後,我要感謝我親愛的父母,沒有你們對我的愛,今天的我就不可能擁有我喜歡的事業,寫出我喜歡的書,我也要將我的這本書獻給你們。我永遠愛著你們。...
吳亮
2008年1月10日
第1章 從零開始
程式設計之道無遠弗屆,御晨風而返。——傑弗瑞·詹姆士
在人類漫漫的歷史長河裡,很難找到第二個由簡單邏輯和抽象符號組合而成的,具有如此宏大信息量和豐富多彩內涵的領域。從某種意義上說,當你翻開這本書的時候,你已經踏入了一個任由你制定規則的未知世界。儘管你面對的僅僅是程式設計領域的冰山一角,但你將透過它,去領悟“道”的奧秘。在接下來的一段時間內,你會同我一起,掌握一種簡單而優雅的神秘語言,學會如何將你的意志作用於它。這種語言中所蘊涵著的亘古之力,將為你開啟通往神秘世界的大門……
1.1 為什麼選擇JavaScript?
在一些人眼裡,程式設計是一件神秘而浪漫的藝術工作,對他們來說,一旦選定某種程式語言,就會像一個忠貞的信徒一樣堅持用它來完成任何事情,然而我不是浪漫的藝匠,大多數人也都不是,很多時候我們學習一種新技術的唯一目的,只是為了把手中的事情做得更好。所以,。當你面對一項陌生的技術時,需要問的第一個問題往往是,我為什麼選擇它,它對我來說,真的如我所想的那么重要嗎?
好,讓我們帶著問題開始。
1.1.1 用戶的偏好——B/S模式
如果你堅持站在專業人員的角度,你就很難理解為什麼B/S模式會那么受歡迎。如果你是一個資深的程式設計師,有時候你甚至會對那些B/S模式的東西有一點點反感。因為在你看來,瀏覽器、表單、DOM和其他一切與B/S沾邊的東西,大多是行為古怪而難以駕馭的。以你的經驗,你會發現實現同樣的互動,用B/S來做通常會比用任何一種客戶端程式來做要困難得多。
如果你嘗試站在用戶的角度,你會發現為什麼大多數最終用戶對B/S模式卻是如此的青睞。至少你不必去下載和安裝一個額外的程式到你的電腦上,不必為反覆執行安裝程式而困擾,不必整天被新的升級補丁打斷工作,不必理會註冊表、磁碟空間和一切對普通用戶來說有點頭疼的概念。如果你的工作地點不是固定的辦公室,你日常工作的PC也不是固定的一台或者兩台,那么,B/S的意義對你而言或許比想像的還要大。