JavaScript的目的分析
更新時(shí)間:2007年01月05日 00:00:00 作者:
從今天起,我將陸續(xù)將 ppk on JavaScript 的讀書心得發(fā)布到這個(gè)blog上。ppk是我所景仰的一位web開發(fā)者,原因無它,只是因?yàn)樽鳛橐粋€(gè)JavaScript的開發(fā)者來說,他涉及的領(lǐng)域包括web標(biāo)準(zhǔn),可用性,無障礙等,正是其他開發(fā)者所不關(guān)注或者故意忽略的。并且,他寫了很多案例測(cè)試不同的瀏覽器,總結(jié)出JavaScript的接口(API)兼容性,成為JavaScript開發(fā)者重要參考資料,幾年如一日,這種鉆研精神是很多人所缺乏的。
ppk在今年9月出版了他的書,我從去年起就在等的書。今天拿到手,迫不及待地把第一章閱讀完畢。果然讓人充滿驚喜,他的功力非同一般。雖然只是一個(gè)初學(xué)者,但我認(rèn)為我已經(jīng)走在正確的學(xué)習(xí)道路上。我想,我若能將學(xué)習(xí)心得分享,能讓正在學(xué)習(xí)的人看到,可以一起交流一起進(jìn)步,盡管我不敢確保你能從我這里得到什么啟發(fā),但我可以確信,我這些筆記會(huì)比你拷貝粘貼代碼的學(xué)習(xí)方式更正確。
這本書有十章,章名都簡(jiǎn)潔明了,分別是:目的,背景,瀏覽器,準(zhǔn)備,核心,BOM, 事件,DOM, CSS更改和數(shù)據(jù)獲取。從來沒有一本書能如此簡(jiǎn)潔地明確JavaScript的方方面面,因此學(xué)習(xí)不會(huì)有太大負(fù)擔(dān)。前言不宜過多,下面就開始我的第一章學(xué)習(xí)筆記。
開篇宗義:JavaScript的目的是,為網(wǎng)頁(yè)增加特別的一層可用性。聽起來很簡(jiǎn)單,但這條黃金定律經(jīng)常被人誤解。就算編寫有用的JavaScript, 開發(fā)者可能還是沒能結(jié)合適當(dāng)?shù)那榫埃篧eb標(biāo)準(zhǔn)運(yùn)動(dòng)發(fā)展下,與當(dāng)代無障礙的HTML頁(yè)面的配合。更為不妙的是,有些開發(fā)者不是為網(wǎng)頁(yè)增加一層可用性,而是用整層取代之,后果是,如果瀏覽器不支持JavaScript, 網(wǎng)站就完了。
概念概述
JavaScript是一門由瀏覽器解釋的腳本語言。它通過在客戶端而不是服務(wù)器端處理某些交互,比如表單驗(yàn)證,創(chuàng)建新菜單來給網(wǎng)站增添可用性。傳統(tǒng)的網(wǎng)頁(yè)交互是,客戶端的一舉一動(dòng)都必須經(jīng)過服務(wù)器端的出來才能反饋回來,漫長(zhǎng)的等待會(huì)讓用戶崩潰。而JavaScript可以在客戶端代替服務(wù)器端做某些事情(最明顯的,表單驗(yàn)證),從而提高用戶體驗(yàn)。
隨著時(shí)代的發(fā)展,JavaScript能夠處理越來越多的交互。問題出現(xiàn)了,JavaScript能做這么多事情,到底要多用還是少用?這就有了富與瘦的對(duì)決。是整個(gè)頁(yè)面都用JavaScript來控制交互還是只增加些許的JavaScript來增強(qiáng)可用性?就是說,盡可能地使用JavaScript還是有所節(jié)制,甚至不用?
瘦客戶端很大程度上依賴于客戶端-服務(wù)器的通訊,而富客戶端盡可能限制額外的數(shù)據(jù)通訊。
哪種方式更好?盡管富客戶端帶來一些可用性益處,但瘦客戶端可能是更“標(biāo)準(zhǔn)”的JavaScript用法。Web被認(rèn)為是文檔集合,而不是界面集合。最明顯的證據(jù)是,瀏覽器有后退前進(jìn)的功能讓你在文檔中跳轉(zhuǎn)而界面會(huì)有么?瀏覽器可以收藏(書簽)文檔而界面可以么?從無障礙來說,瘦客戶端也更少出錯(cuò)。
這種非平衡性是很難解決的。富客戶端當(dāng)然也可以在更高級(jí)的界面做到前進(jìn)后退,或者收藏,也可以做到完美的無障礙。這必須需要大量的額外工作,但不是每個(gè)項(xiàng)目都有超出預(yù)算的時(shí)間或金錢。此外,太過專注于可用性而忽略無障礙也是一個(gè)問題。
那么JavaScript的目的是為富客戶端還是瘦客戶端服務(wù)?答案是:看情況。得看你的網(wǎng)站,你的受眾,你的JavaScript水平。
技術(shù)概述
JavaScript分為六個(gè)方面,分別是核心(Core),瀏覽器對(duì)象模型(BOM),事件(Events),文檔對(duì)象模型(DOM),CSS變更和數(shù)據(jù)獲取(XMLHttpRequest)。
上古時(shí)代,NetScape領(lǐng)頭之時(shí),NetScape3是事實(shí)標(biāo)準(zhǔn)。
當(dāng)代卻沒有這么簡(jiǎn)單。ECMA標(biāo)準(zhǔn)化JavaScript Core, W3C標(biāo)準(zhǔn)化DOM,而BOM尚在WHAT-WG的標(biāo)準(zhǔn)化中,W3C也剛有了XMLHttpRequest的第一份草稿。今天,BOM依然遵循NetScape3的事實(shí)標(biāo)準(zhǔn),而XMLHttpRequest還是遵照Microsoft的原始規(guī)范。
JavaScript的目的在于為網(wǎng)站增加可用性,而不是破壞用戶的隱私和安全。因此JavaScript不允許讀寫用戶的文件(cookies除外),采取同源策略,只允許來自相同域的交互。不允許讀取歷史記錄,不能為上傳文件的表單設(shè)置值,由JavaScript控制的窗口關(guān)閉需經(jīng)用戶確認(rèn),由JavaScript打開的窗口不能小于100×100的窗口,不能移出屏幕之外。
JavaScript的歷史
探尋歷史才能讓我們知道JavaScript為什么會(huì)被誤解得如此深。JavaScript的創(chuàng)造者是Brendan Eich,首次在NetScape 2中實(shí)現(xiàn)。它的目的是創(chuàng)建一門足夠簡(jiǎn)單的語言讓開發(fā)者能容易地為網(wǎng)頁(yè)增加交互,只要把代碼拷貝過來調(diào)整一下就可以。這確實(shí)令人贊嘆,很多JavaScript開發(fā)者是從拷貝粘貼開始的。
不幸的是JavaScript生錯(cuò)了名字,也生錯(cuò)了語法。最初它叫LiveScript,但1996年的時(shí)候Java炙手可熱,NetScape想搭順風(fēng)車,于是某產(chǎn)品經(jīng)理(我想知道她/他是誰,呵呵),命令更名,命令Brendan Eich讓“Javascript像Java”。這讓很多人誤認(rèn)為JavaScript是Java的低級(jí)版,不能引起嚴(yán)肅程序員的關(guān)注。
1996年之時(shí),NetScape 3是王,Microsoft只能照抄。這是一個(gè)難得的和諧期,當(dāng)然,那時(shí)候?yàn)g覽器比起現(xiàn)在來“瘦”了,僅限于表單驗(yàn)證,鼠標(biāo)輪換的一些小花招而已。
接下來就是影響深遠(yuǎn)的瀏覽器大戰(zhàn)了。為了爭(zhēng)奪市場(chǎng),兩家瀏覽器紛紛實(shí)現(xiàn)不同的東西,誰都想成為事實(shí)標(biāo)準(zhǔn)。最有名的就是NetScape 4的document.layer和IE 4的document.all(忘記它們吧?。?。它們讓DHTML流行起來。
1999年Microsoft以推出良好支持CSS和DOM的IE5勝出,NetScape的讓位終于有足夠的時(shí)間讓一場(chǎng)革命發(fā)生,那就是CSS。WaSP首先從CSS入手,而很多專家也發(fā)現(xiàn)/發(fā)明了許多瀏覽器的補(bǔ)救辦法,讓這場(chǎng)革命成為可能。
2003年,一些先鋒們?cè)贑SS革命的影響下開始探索新的JavaScript風(fēng)格,更多地關(guān)注無障礙,改觀人們對(duì)它的壞名聲,那就是unobstrusive——把JavaScript從HTML結(jié)構(gòu)層分離出來,遺憾的是,那些在瀏覽器大戰(zhàn)存活下來的程序員可能還沒有發(fā)現(xiàn)這條新道路。
2005年,Ajax熱潮為JavaScript社區(qū)注入新的血液。但某些方面,Ajax太像DHTML了,無障礙,是很多Ajax應(yīng)用的難言之隱。這個(gè)熱潮趨向于關(guān)注技術(shù)(如何Ajax),而可用性和交互(為何Ajax)卻被低估。最后,各種腫脹的庫(kù)(現(xiàn)在稱為框架)迅速發(fā)展起來。
Ajax依然全速前進(jìn),但這會(huì)像DHTML一樣結(jié)果,人們漸漸失去興趣,它們會(huì)土崩瓦解。
JavaScript興衰史好像有一定的“定律”支配,我們能打破這個(gè)怪圈嗎?不管如何,JavaScript開發(fā)者在尋找各種酷代碼和華而不實(shí)的框架之外,更應(yīng)該調(diào)整自己的行動(dòng),讓JavaScript運(yùn)行在:標(biāo)準(zhǔn)兼容的,無障礙的網(wǎng)頁(yè)中。
ppk在今年9月出版了他的書,我從去年起就在等的書。今天拿到手,迫不及待地把第一章閱讀完畢。果然讓人充滿驚喜,他的功力非同一般。雖然只是一個(gè)初學(xué)者,但我認(rèn)為我已經(jīng)走在正確的學(xué)習(xí)道路上。我想,我若能將學(xué)習(xí)心得分享,能讓正在學(xué)習(xí)的人看到,可以一起交流一起進(jìn)步,盡管我不敢確保你能從我這里得到什么啟發(fā),但我可以確信,我這些筆記會(huì)比你拷貝粘貼代碼的學(xué)習(xí)方式更正確。
這本書有十章,章名都簡(jiǎn)潔明了,分別是:目的,背景,瀏覽器,準(zhǔn)備,核心,BOM, 事件,DOM, CSS更改和數(shù)據(jù)獲取。從來沒有一本書能如此簡(jiǎn)潔地明確JavaScript的方方面面,因此學(xué)習(xí)不會(huì)有太大負(fù)擔(dān)。前言不宜過多,下面就開始我的第一章學(xué)習(xí)筆記。
開篇宗義:JavaScript的目的是,為網(wǎng)頁(yè)增加特別的一層可用性。聽起來很簡(jiǎn)單,但這條黃金定律經(jīng)常被人誤解。就算編寫有用的JavaScript, 開發(fā)者可能還是沒能結(jié)合適當(dāng)?shù)那榫埃篧eb標(biāo)準(zhǔn)運(yùn)動(dòng)發(fā)展下,與當(dāng)代無障礙的HTML頁(yè)面的配合。更為不妙的是,有些開發(fā)者不是為網(wǎng)頁(yè)增加一層可用性,而是用整層取代之,后果是,如果瀏覽器不支持JavaScript, 網(wǎng)站就完了。
概念概述
JavaScript是一門由瀏覽器解釋的腳本語言。它通過在客戶端而不是服務(wù)器端處理某些交互,比如表單驗(yàn)證,創(chuàng)建新菜單來給網(wǎng)站增添可用性。傳統(tǒng)的網(wǎng)頁(yè)交互是,客戶端的一舉一動(dòng)都必須經(jīng)過服務(wù)器端的出來才能反饋回來,漫長(zhǎng)的等待會(huì)讓用戶崩潰。而JavaScript可以在客戶端代替服務(wù)器端做某些事情(最明顯的,表單驗(yàn)證),從而提高用戶體驗(yàn)。
隨著時(shí)代的發(fā)展,JavaScript能夠處理越來越多的交互。問題出現(xiàn)了,JavaScript能做這么多事情,到底要多用還是少用?這就有了富與瘦的對(duì)決。是整個(gè)頁(yè)面都用JavaScript來控制交互還是只增加些許的JavaScript來增強(qiáng)可用性?就是說,盡可能地使用JavaScript還是有所節(jié)制,甚至不用?
瘦客戶端很大程度上依賴于客戶端-服務(wù)器的通訊,而富客戶端盡可能限制額外的數(shù)據(jù)通訊。
哪種方式更好?盡管富客戶端帶來一些可用性益處,但瘦客戶端可能是更“標(biāo)準(zhǔn)”的JavaScript用法。Web被認(rèn)為是文檔集合,而不是界面集合。最明顯的證據(jù)是,瀏覽器有后退前進(jìn)的功能讓你在文檔中跳轉(zhuǎn)而界面會(huì)有么?瀏覽器可以收藏(書簽)文檔而界面可以么?從無障礙來說,瘦客戶端也更少出錯(cuò)。
這種非平衡性是很難解決的。富客戶端當(dāng)然也可以在更高級(jí)的界面做到前進(jìn)后退,或者收藏,也可以做到完美的無障礙。這必須需要大量的額外工作,但不是每個(gè)項(xiàng)目都有超出預(yù)算的時(shí)間或金錢。此外,太過專注于可用性而忽略無障礙也是一個(gè)問題。
那么JavaScript的目的是為富客戶端還是瘦客戶端服務(wù)?答案是:看情況。得看你的網(wǎng)站,你的受眾,你的JavaScript水平。
技術(shù)概述
JavaScript分為六個(gè)方面,分別是核心(Core),瀏覽器對(duì)象模型(BOM),事件(Events),文檔對(duì)象模型(DOM),CSS變更和數(shù)據(jù)獲取(XMLHttpRequest)。
上古時(shí)代,NetScape領(lǐng)頭之時(shí),NetScape3是事實(shí)標(biāo)準(zhǔn)。
當(dāng)代卻沒有這么簡(jiǎn)單。ECMA標(biāo)準(zhǔn)化JavaScript Core, W3C標(biāo)準(zhǔn)化DOM,而BOM尚在WHAT-WG的標(biāo)準(zhǔn)化中,W3C也剛有了XMLHttpRequest的第一份草稿。今天,BOM依然遵循NetScape3的事實(shí)標(biāo)準(zhǔn),而XMLHttpRequest還是遵照Microsoft的原始規(guī)范。
JavaScript的目的在于為網(wǎng)站增加可用性,而不是破壞用戶的隱私和安全。因此JavaScript不允許讀寫用戶的文件(cookies除外),采取同源策略,只允許來自相同域的交互。不允許讀取歷史記錄,不能為上傳文件的表單設(shè)置值,由JavaScript控制的窗口關(guān)閉需經(jīng)用戶確認(rèn),由JavaScript打開的窗口不能小于100×100的窗口,不能移出屏幕之外。
JavaScript的歷史
探尋歷史才能讓我們知道JavaScript為什么會(huì)被誤解得如此深。JavaScript的創(chuàng)造者是Brendan Eich,首次在NetScape 2中實(shí)現(xiàn)。它的目的是創(chuàng)建一門足夠簡(jiǎn)單的語言讓開發(fā)者能容易地為網(wǎng)頁(yè)增加交互,只要把代碼拷貝過來調(diào)整一下就可以。這確實(shí)令人贊嘆,很多JavaScript開發(fā)者是從拷貝粘貼開始的。
不幸的是JavaScript生錯(cuò)了名字,也生錯(cuò)了語法。最初它叫LiveScript,但1996年的時(shí)候Java炙手可熱,NetScape想搭順風(fēng)車,于是某產(chǎn)品經(jīng)理(我想知道她/他是誰,呵呵),命令更名,命令Brendan Eich讓“Javascript像Java”。這讓很多人誤認(rèn)為JavaScript是Java的低級(jí)版,不能引起嚴(yán)肅程序員的關(guān)注。
1996年之時(shí),NetScape 3是王,Microsoft只能照抄。這是一個(gè)難得的和諧期,當(dāng)然,那時(shí)候?yàn)g覽器比起現(xiàn)在來“瘦”了,僅限于表單驗(yàn)證,鼠標(biāo)輪換的一些小花招而已。
接下來就是影響深遠(yuǎn)的瀏覽器大戰(zhàn)了。為了爭(zhēng)奪市場(chǎng),兩家瀏覽器紛紛實(shí)現(xiàn)不同的東西,誰都想成為事實(shí)標(biāo)準(zhǔn)。最有名的就是NetScape 4的document.layer和IE 4的document.all(忘記它們吧?。?。它們讓DHTML流行起來。
1999年Microsoft以推出良好支持CSS和DOM的IE5勝出,NetScape的讓位終于有足夠的時(shí)間讓一場(chǎng)革命發(fā)生,那就是CSS。WaSP首先從CSS入手,而很多專家也發(fā)現(xiàn)/發(fā)明了許多瀏覽器的補(bǔ)救辦法,讓這場(chǎng)革命成為可能。
2003年,一些先鋒們?cè)贑SS革命的影響下開始探索新的JavaScript風(fēng)格,更多地關(guān)注無障礙,改觀人們對(duì)它的壞名聲,那就是unobstrusive——把JavaScript從HTML結(jié)構(gòu)層分離出來,遺憾的是,那些在瀏覽器大戰(zhàn)存活下來的程序員可能還沒有發(fā)現(xiàn)這條新道路。
2005年,Ajax熱潮為JavaScript社區(qū)注入新的血液。但某些方面,Ajax太像DHTML了,無障礙,是很多Ajax應(yīng)用的難言之隱。這個(gè)熱潮趨向于關(guān)注技術(shù)(如何Ajax),而可用性和交互(為何Ajax)卻被低估。最后,各種腫脹的庫(kù)(現(xiàn)在稱為框架)迅速發(fā)展起來。
Ajax依然全速前進(jìn),但這會(huì)像DHTML一樣結(jié)果,人們漸漸失去興趣,它們會(huì)土崩瓦解。
JavaScript興衰史好像有一定的“定律”支配,我們能打破這個(gè)怪圈嗎?不管如何,JavaScript開發(fā)者在尋找各種酷代碼和華而不實(shí)的框架之外,更應(yīng)該調(diào)整自己的行動(dòng),讓JavaScript運(yùn)行在:標(biāo)準(zhǔn)兼容的,無障礙的網(wǎng)頁(yè)中。
相關(guān)文章
JavaScript與DOM組合動(dòng)態(tài)創(chuàng)建表格實(shí)例
這篇文章簡(jiǎn)單介紹了DOM 1.0一些基本而強(qiáng)大的方法以及如何在JavaScript中使用它們;你可以學(xué)到如何動(dòng)態(tài)地創(chuàng)建、獲取、控制和刪除HTML元素2012-12-12jQuery中文入門指南,翻譯加實(shí)例,jQuery的起點(diǎn)教程
jQuery中文入門指南,翻譯加實(shí)例,jQuery的起點(diǎn)教程...2007-02-02javascript真的不難-回顧一下基礎(chǔ)知識(shí)
先來學(xué)習(xí)一下Javascript語言中的基礎(chǔ)知識(shí)問題其時(shí)對(duì)于每種編程語言來說基礎(chǔ)知識(shí)都是大同小異的,對(duì)變量,函數(shù),條件語句塊,循環(huán)語句塊等等,本文簡(jiǎn)要介紹一下,感興趣的朋友可以了解下2013-01-01JavaScript對(duì)象的property屬性詳解
這篇文章主要介紹了JavaScript對(duì)象的property屬性,詳細(xì)講解了property的各種屬性,需要的朋友可以參考下2014-04-04document.styleSheets[0].disabled
document.styleSheets[0].disabled...2006-10-10