序言
寫本文的目的是對最近看過的篇幅進行簡單的總結,把我認為重點應該記住的東西寫出來,方便以后查看回憶。
ECMAScript基礎
Ø 在20世紀90年代,為了提高系統運行速度,各大廠商分別開發了自己的script腳本,用于在客戶端進行數據校驗等功能,但開發出來的網頁不能夠跨平臺運行。隨著業界的擔心,制定一個script標準勢在必行。ECMAScript就是規定了能適應于各種宿主環境的script核心語法規則。一個完整的javascript庫包括三部分:ECMAScript、DOM、BOM。
Ø 原始值:是存儲在棧中的簡單數據段,也就是說,他們的值直接存儲在變量訪問的內存空間。
Ø 引用值:是存儲在堆中的對象,也就是說,存儲在變量處的值是一個指針,指向存儲對象的內存處。
Ø 有5中原始值:String、Number、 Object 、undefined 、boolean
Undefined 聲明的變量未初始化;
Null 表示尚未存在的對象;
Number 5個特殊值也屬于此類型:Number.max_value;Number.min_value;Number.positive_infinity;
Number.negative_infinity;NAN。
相關的方法有:isFinit()、isNaN()。
Ø typeOf 檢查變量類型;intenseOf 檢測對象類型。
Ø 5種引用類型:
Number類型相關方法:paserInt() 、paserFloat() 、toFixed()、toExponential()、toPrecision()。
String類型包含的常用方法有:charAt() 、charCodeAt()、 indexOf() 、lastIndexOf()、 splice()、 contact() 、lowerCase() 、toUpperCase()。
Ø 函數理解:JS中的函數其實是一個功能完整的對象,類Function可以創建任何類型的函數,也即對象,對象名或叫函數名只是一個指向對象的指針,所以函數名可以做為參數傳遞給另外一個函數。
第三章 對象基礎
JS中有沒有類,為何說JS中沒有真正的類?什么才叫正式的類?
JS中有三種對象:本地對象、內置對象、宿主對象。
本地對象:獨立于宿主環境的ECMAScript定義的對象(類?)最常用的有Array和Date類。
Ø Array類:可以聲明一個變量直接進行附值,但是不能用數組的一些方法?(試驗)數組Array對象包含的方法有:toString()、valueOf()、toLocalString()、join()、contact()、slice()、push、pop()、shift()、unshift()、reverse()、sort()、splice()。
Ø Date對象:以后再仔細的看。
內置對象:類似JSP中的內置對象,不需要開發者實例化即可使用,調用里面的方法也不需要指出對象的引用,當然了,內置對象都屬于本地對象,在JS中提供兩個內置對象:global和Math對象。
Ø Global對象:它包含很多方法和和屬性,但用代碼來測試他又不是個對象,不解,為什么ECMA不叫他是個對象。它包含的方法有:siNan()、isFinite()、parseInt()、parseFloat()、encodeURL()、decodeURL()、eval()。JS提供的一些特殊值及所有本地對象的構造函數都是Global對象的屬性,它包含的特殊值有:undefined、NaN、infinity、Object、Array、Function、Boolean、String、Number、Date、RegExp、Error…….and so on。
Ø Math對象:一發很復雜、很有用、必須要熟記其所有方法的對象。它包含很多屬性,大多是數學計算時的特殊值,例如:E、LN10、LOG2、Log10E、PI、SQRT1_2、sqrt2。它包含的方法有:min()、max()、abs()、random(),舍入操作的ceil()、floor()、round(),與指數有關的方法exp()、log()、pow()、sqrt()及全部的三角函數求值方法。
JS中所有的方法和屬性都是public類型的。
在JS中,對象名只是一個引用,指向對象的內存地址。在JAVA中每個對象都獨立站用一快內存空間,變量名即是對象的存儲處?
在ECMAScript中沒有StringBuffer對象,要通過自己編寫代碼來創建具有此功能的對象。用Array對象可以使用同樣的功能。
ProtoType對象的所有屬性和方法都會被傳遞給那個類的所有實例。
每個對象都有ProtoType屬性,可以通過它更改或添加任何本地、內置對象的方法。
定義類(對象):有5種常用的方式,它們分別是構造函數方式、原型方式、混合的構造函數/原型方式、動態原型方式、混合工廠方式。我覺得混合方式和動態原都比較好,在對象比較復雜的情況易用混合方式,在對象定義簡單的情況下用動態原型方式更為直觀。
第四章 繼承
為了安全,不能繼承本地類和宿主類?
JS中沒有真正意義上的繼承,都是模仿繼承機制,常用的有三模仿繼承的機制:對象冒充、call()方法、apply()方法(實驗)、原型鏈方式(實驗)。通過比較還是用混合的方式比較好,用call()方法繼承屬性,用原型鏈方式繼承方法。
另外利用第三方JS庫可以使用其他的繼承方式,如:zInherit、xbObjects。
第五章 瀏覽器中的JS
前三張都是對核心ECMAScript的討論,以下章節都是與WEB有關的內容。
在XHTML中大于、小于等特殊方法不能被正確識別?(P115)(實驗)
BOM:提供了獨立于內容而與瀏覽器窗口進行交互的對象。
Ø Window對象表示整個瀏覽器窗口。如果使用框架,每個框架都有自己的window對象,存放在Frames集合中,調用window對象的屬性和方法時,不必要明確引用它。
Window對象的方法有:
窗口操作:moveBy()、moveTo()、resizeBy()、resizeTo()。
獲取位置和大小:screenLeft()、screenTop()。
導航和打開新窗口:用JS可以導航到指定的URL,并用window.open()方法打開窗口,該方法接受4個參數,即要載入頁面的URL、新窗口的名字、特性字符串、是否替換當前頁面的Boolean值。這個方法返回一個window對象的引用值。Openner屬性存放打開它的窗口的引用。
彈出系統對話框:alert()、confirm()、prompt()。
狀態欄:window對象的兩個屬性status、defaultStatus。
暫停和時間間隔:setTimeOut()、clearTimeout()、setInerval()、clearInterval()。(練習使用)
歷史:history對象完成。
Ø Document對象:由一系列的集合組成,如anchors、applets、embeds、forms、images、links。方法有write()、writeln()、open()、close()。
Ø Location對象:表示載入窗口的URL,他也可以解析URL,它包含的屬性有hash、host、hostname、pathname、port、protocol、search。方法有:replace()、reload()、toString()。
Ø Navigator對象:一個重要的用途就是檢測瀏覽器類型及版本,在chapter 8將詳細介紹。
Ø Screen對象:用于用戶獲取屏幕信息,它包含的屬性有availHeight、availWidth、colorDepth、Height、width。
第六章 DOM基礎
起源:XML是從SML派生而來的,SGML有許多奇怪的語法規則,解析SGML文檔非常困難。XML去掉了SGML許多另人頭疼的隨意語法,使解析XML變得容易。XML的主要目的是使用文本以結構化的方式來表示數據。ML—標記語言。(待續)
第八章 檢測瀏覽器和操作系統
Ø 對象特征檢測法:判斷瀏覽器是否支持某對象/特征,而不在乎瀏覽器的真正身份,此方法簡單,問題是不能檢測瀏覽器的具體類型。
Ø User_agent檢測法:原理:每個訪問望阿站的程序都會提供一個user_agent字符串來向服務器確定它的身份。用mavigator.userAgent可以得到此字符串,這個字符串是user_agent方式檢測瀏覽器的基礎。
當然了記住各瀏覽器的user_agent字符串將給你帶來編程時的方便,但是好象不容易。(有必要嗎?)
user_agent字符串簡史:了解它,可以讓你更容易第記住瀏覽器的user_agent字符串。
Ø 瀏覽器檢測腳本:此部分屬于公用代碼,應該寫到一個公用文件中,每個項目都可以直接用,我所參與的項目中有這些腳本文件嗎?
用navigator.appVersion不就可以確定瀏覽器版本了嗎?為什么還要用user_agent方式獲取?
書中只討論windows、macintosh平臺?
練習:寫一個用于比較來年感個版本號大小的函數;寫一個用于檢測是否為IE和檢測IE版本號的函數。
Ø OS檢測腳本:用navigator.platform來檢測OS。
練習:寫一個檢測windows版本的程序。
第九章 事件
事件流:IE的冒泡型事件留、Netscape的捕獲型事件留及DOM事件留。
事件處理函數:給元素附加事件處理函數在IE和DOM有不同的實現方式。在IE中每個元素都有attachEvent()和detachEvent()方法;在DOM中有對應的addEventListener()、removeEventListener()方法。
事件對象:包含發生事件時鼠標、鍵盤等信息的對象。
在IE中這些信息被包含在event對象中。熟記event對象的屬性和方法。P234
事件類型:
Ø 熟記鼠標事件:click、dblclick、mouseout、mouseover、mouseup、mousemove。
每個鼠標事件都會給event對象的以下屬性添入值:坐標屬性、Type屬性、srcElement屬性、shiftKey ctrlKey altKey、button屬性。鼠標事件的順序。
此節內容可以結合第十一章內容學習。
Ø 鍵盤事件:keyDown—鍵盤上按下某鍵時觸發,針對所有鍵。keyPress—按下鍵并產生一個字符時觸發,所以按下shift、art、ctrl及方向鍵時并不會觸發此事件。
HMTL事件:load事件、unload事件、select事件、change事件、resize事件、scroll事件、blur事件、body的兩個屬性—scrollLeft和scrollTop。結合第十一章學習。
第十章 高級DOM技術
CSS中樣式特性名字的書寫與JS中不同,在Style對象中,兩個單詞的樣式表示方法是匈牙利表示法。
Style對象可以操縱內聯樣式的值。它有個cssText屬性,存儲此CSS樣式的字符串。
DOM樣式的方法:
提示:此類方法在IE中不實用。DOM中Style對象中包含方法:getPropertyValue()、getpropertyPriority()、item()、removeProperty()、serProperty()。
自定義鼠標提示:原意—鼠標移到某元素上顯示title提示;
現意—當鼠標移到某元素上時,讓某他原本隱藏的DIV顯示在某特定位置(一般在鼠標旁邊)
可折疊區域:介紹一個具體應用。很不錯的,練習。
訪問樣式表:樣式表—在<style/>元素中或在外部樣式表中定義的CSS樣式。
Document.styleSheets可以獲得樣式表的引用。它有一些常用的屬性—disabled、type等。
樣式表引用對象有個cssRules或rules屬性,它包含樣式表中所有的CSS規則,它是一個集合。
最終樣式:它由所有內聯樣式和CSS規則計算出的最終結果,也即其作用的CSS樣式元素集合。在IE中可以用style.currentStyle來獲得。
innerText和innerHTML
不解:oDiv.innerText = oDiv.innerText將刪除oDiv標簽。
IE中的范圍:
創建范圍—creatTextRange();
選擇某個區域:findText();
移動選區:move()、moveStart()、moveEnd()、expand();
與范圍內容交互:text屬性和pasteHTML()方法;
折疊范圍:collapse() 就是清楚remove、clear的意思?
比較范圍:compareEndPoints()、isEqual()、isRange();
復制范圍:duplicate();
范圍的引用:值得一看,30秒鐘。
第十一章 表單和數據完整性
<form/>元素的特性:method、action、enctype、accept、accept_charset。
表單元素的共性:disabled、form、blur、focus()、onblur()、onfocus()。
僅提交一次:當點擊提交按鈕后禁用它,是用戶不會重復提交多次。
不能用submit按鈕并用onclick禁用,因為在表單提交前已經被禁用,這講導致表單不被提交,怎么用普通的button就可以?
Reset:即使使用reset()方法, onreset事件函數仍會被觸發。
文本框事件:blur、focus、change、select,其中change事件是在文本框失去焦點后才被觸發。
自動選中文本:一個具體應用。當獲到焦點時便選中文本。
自動切換到下一個:一個具體應用。代碼寫得不錯,值得一看。
限制textarea的字符數:雖然textarea不能用maxlength屬性來限制最大輸入長度,但仍可以設置manlength屬性可,并可以通過getAttibute()來獲取這個值。
允許/阻止文本框中的字符:阻止無效字符,只允許輸入有效字符。看代碼,挺有用的。
不要忘記粘貼:禁止粘貼;失去焦點時進行驗證。
使用上下方向鍵操作數字文本(自增、自減):
列表和組合框:只要給 <select/>元素添加size特性就可以使組合框變為列表。Multiple屬性用于設置是否可多選,默認不能。
刪除選項:將某想置為null;用remove()方法。
移動選項:可以直接從一個列表框移到另一個列表框?(實驗)
重新排序選項:重要用到DOM中的insertBefore()函數。
自動提示文本框:創建匹配的Array數組;獲取匹配的只的Array;將選中的條目添加到文本框。再看代碼,寫得很好。
第十二章 對表格排序
這一章探索了如何JavaScript將很多基于服務器端的功能轉移到客戶端,即對HTML表格進行排序。這一章完全沒有新的語法知識,完全是對以前章節知識的應用。練習用一下一切OK。
知識要點:Array對象的sort()方法可以接受一個客戶化的比較函數作為參數。
建立一個能處理各種數據類型的比較函數。
Reverse()倒序。
用<、> 可以對String、Date、Number類型的數據進行比較?
可以為HTML元素添加自定義特性。
第十三章 拖放
系統拖放:由操作系統處理完成的拖放行為;
模擬拖放:創建可以跟著鼠標移動的絕對定位層。
另外還可以利用aDragDrop庫來實現拖放功能。
第十四章 錯誤處理
JS中的錯誤:發生在解析(編譯)時的語法錯誤;
JS中的異常:在運行時發生。如window.yangaiyou();語法正確,但會發生異常。
l onerror對象:在window對象和圖象對象?上都有onerror事件處理函數,當頁面發生錯誤時,onerror事件將在window對象上觸發。當頁面上的圖象不能載入時會在image對象上觸發。
可以這樣定義onerror函數
window.onerror = function(sMessage,sUrl,sLine){};
onerror函數的三個參數用于確定錯誤確切的信息,代表的意思依次為:錯誤信息;發生錯誤的文件;發生錯誤的行號。
l Try...catch語句:
Catch語句捕獲的是一個Error對象,他有name和message屬性,name指明錯誤的類型或叫名字;message指明具體的錯誤信息。
也可以用類似throw new Error(“發生了錯誤!”)的語句來拋出異常信息。
第十五章 javascript中的XML
l IE中對XML DOM的支持:是基于ActiveX的MXXML庫。用ActiveXObject類來創建ActiveX對象,形如
Var oXmlDom = new ActiveXObject(“Microsoft.XmlDom”);
參數為要實例化的ActiveX對象的字符串代號。
如何確保使用最新的XML DOM?
創建XML DOM 對象的下一步自然就是載入XML文件,XML DOM提供了兩種方法來載入XML文件:load()、loadXML()。前者用于從服務器端載入XML文件;后者可以直接輸入字符串來載入。如:
oXmlDom.load(“./treeAction.do”);
執行完這行代碼oXmlDom對象就會包含能表示XML文件結構的一個DOM文擋,這樣就可以使用DOM所有的特性和方法了。
默認采用異步方式載入,當readyState值發生變化時會觸發onreadystatechange函數,當其值為4時表示XML文件已完全載入,通常這時就要調用回調函數。
我們應該在XML文件載入后立即檢查錯誤,錯誤信息都包含在parseError對象中,我們可以自己創建錯誤提示,通常是由于XML文件格式錯誤造成的。
AJAX必備知識。
l xPath小語言:
它提供了如何定位一個或多個結點的功能。它分兩部分:上下文結點;結點模式。前者給出要匹配文檔的開始位置;后者是一個字符串形式的選擇器,可以想象成正則表達式。
IE中提供selectNodes()方法來返回匹配的結點集合,參數為要匹配的字符串(正則表達式)。形如:
oXmlDom.documentElement.selectNodes(“employee/name”);
選擇了所有<employee/>元素下的<name/>元素。
l XSLT 可擴展樣式表語言轉換:
XSLT可以對XML文件進行操作,將其轉換成其他的文本格式,入HTML。XSLT文件稱為樣式表,由一些模板組成,通過為不同元素和條件定義模板,XSLT成了XML文件的轉換器。
第十六章 客戶端與服務器端的通信
第十七章 Web服務
第十八章 與插件進行交互
第十九章 部署問題
第二十章 JS的文萊
posted on 2007-07-01 13:50
楊愛友 閱讀(1948)
評論(10) 編輯 收藏 所屬分類:
java相關技術