以下筆記大部分整理自《JavaScript權(quán)威指南》,本文僅方便大家遇到問(wèn)題時(shí)快速查詢(xún)。建議大家閱讀原書(shū)。
水平有限,如有錯(cuò)誤請(qǐng)大家指正。
1) 讀未聲明的變量會(huì)產(chǎn)生錯(cuò)誤。寫(xiě)未聲明的變量會(huì)是JavaScript環(huán)境自動(dòng)產(chǎn)生一個(gè)全局變量。
2) 對(duì)于完全等同“===”,兩個(gè)null或者兩個(gè)undefined是等同的;但null與undefined是不等同的。
3) 對(duì)于相等“==”, null與undefined是相等的。若值與對(duì)象比較,核心語(yǔ)言?xún)?nèi)部類(lèi)會(huì)嘗試用valueof()轉(zhuǎn)換,再?lài)L試用toString()轉(zhuǎn)換。就是說(shuō)valueof()會(huì)比toString()有更高的優(yōu)先級(jí)。但規(guī)則不絕對(duì),例如Date類(lèi),它會(huì)首先嘗試用toString()轉(zhuǎn)換。當(dāng)類(lèi)的這兩個(gè)方法實(shí)現(xiàn)不一致時(shí),在要進(jìn)行類(lèi)型轉(zhuǎn)換時(shí)指定具體的實(shí)現(xiàn)方法比較安全。
4) 在比較運(yùn)算中,若一個(gè)對(duì)象或值被轉(zhuǎn)換成NaN(Not a Number),則永遠(yuǎn)返回false。
5) in可以檢查指定字符串是否是一個(gè)對(duì)象的基本屬性或方法名稱(chēng);instanceof運(yùn)算符返回左邊的對(duì)象是否右邊類(lèi)的一個(gè)實(shí)例;delete可以刪除一個(gè)屬性,它不會(huì)影響到屬性關(guān)聯(lián)的對(duì)象的生存,若該屬性不存在會(huì)返回true;[]可以以字符串的方式存取對(duì)象的屬性。
6) typeof函數(shù)的返回值:數(shù)字——number,字符串——string,布爾值——Boolean,對(duì)象、數(shù)組、null——object,函數(shù)名——function或undefined(未定義時(shí))。主要用來(lái)區(qū)別區(qū)別對(duì)象和原始類(lèi)型。要區(qū)分對(duì)象的具體類(lèi)型,用instanceof運(yùn)算符。
7) 在函數(shù)體內(nèi)有隱含的arguments對(duì)象,可取得所有傳入的參數(shù),可用類(lèi)似數(shù)組的方式讀/寫(xiě)各參數(shù),length屬性表示參數(shù)的個(gè)數(shù)。但函數(shù)的只讀屬性length表示函數(shù)實(shí)際定義的參數(shù)個(gè)數(shù)。一個(gè)名為callee的屬性代表函數(shù)本身。
8) 構(gòu)造函數(shù)也是函數(shù),但它通過(guò)new調(diào)用,無(wú)返回值。函數(shù)體內(nèi)通過(guò)this來(lái)取得將要初始化的對(duì)象。
9) 對(duì)象的方法可用this對(duì)對(duì)象自身進(jìn)行操作,其它方面與普通的函數(shù)沒(méi)有任何區(qū)別。
10) 每個(gè)類(lèi)都有一個(gè)原型(prototype)對(duì)象,它具有一套屬性和方法,用來(lái)共享一個(gè)類(lèi)的方法和常量,還有一個(gè)constructor的屬性引用構(gòu)造函數(shù)。
11) JavaScript中面向?qū)ο蟮奶匦裕?/span>
a) 實(shí)例屬性:在構(gòu)造函數(shù)創(chuàng)建或初始化的屬性。
b) 實(shí)例方法:在構(gòu)造函數(shù)中把原型對(duì)象中的一個(gè)屬性設(shè)為函數(shù)來(lái)實(shí)現(xiàn)。
c) 類(lèi)屬性:構(gòu)造函數(shù)本身的屬性。
d) 類(lèi)方法:用合適的函數(shù)作為構(gòu)造函數(shù)本身的一個(gè)屬性。
e) 子類(lèi):把原型對(duì)象賦值為父類(lèi)的一個(gè)實(shí)例,默認(rèn)父類(lèi)為Object的實(shí)例。同時(shí)還要將prototype.constructor賦值為子類(lèi)的構(gòu)造函數(shù)自己。
f) 繼承:只是在查詢(xún)一個(gè)屬性時(shí)自動(dòng)發(fā)生,而不會(huì)在寫(xiě)屬性時(shí)發(fā)生,就是說(shuō)單寫(xiě)一個(gè)父類(lèi)的屬性時(shí),JavaScript環(huán)境會(huì)為對(duì)象本身創(chuàng)建一個(gè)同名的屬性,從此該屬性就覆蓋了父類(lèi)中的屬性。
12) 創(chuàng)建一個(gè)數(shù)組可用 new Array() ??梢栽跇?gòu)造函數(shù)參數(shù)中指定數(shù)組的前n個(gè)元素的值。數(shù)組的元素可以具有任意類(lèi)型,甚至是另外一個(gè)數(shù)組。同一數(shù)組中可以存在不同類(lèi)型的元素。數(shù)組的length是可讀寫(xiě)的。這也是縮短一個(gè)數(shù)組的唯一方法。
1) Window類(lèi)的實(shí)例是全局對(duì)象,用它的window或者self屬性可引用它自己。
2) 一個(gè)應(yīng)用程序出現(xiàn)的每個(gè)窗口或框架都對(duì)應(yīng)一個(gè)Window對(duì)象,而且都為客戶(hù)端JavaScript代碼定義了一個(gè)唯一的執(zhí)行環(huán)境。
3) 腳本執(zhí)行過(guò)程是Web瀏覽器的HTML解析過(guò)程的一部分。腳本按照它們的出現(xiàn)順序執(zhí)行。
4) 簡(jiǎn)單的對(duì)話(huà)框可用:alert()、 confirm()、 prompt()之一。
5) 時(shí)間間隔方法為: setInterval()、 cleraInterval() 。
6) onerror屬性指明錯(cuò)誤處理的方式。 navigator屬性包含Web瀏覽器總體信息。 screen屬性包含顯示器的信息。
7) 打開(kāi)窗口用open()方法,返回值是被打開(kāi)的窗口。調(diào)用應(yīng)該明確指明是window.open(),以避免和document.open()方法混淆。同時(shí)還應(yīng)該調(diào)用focus()方法使窗口成焦點(diǎn)保證窗口可見(jiàn)。opener屬性是打開(kāi)自己的那個(gè)窗口,若是用戶(hù)手動(dòng)打開(kāi),這位null。
8) 關(guān)閉窗口用window.close()方法,窗口關(guān)閉后,代表它的Window對(duì)象可能還生存,可用closed屬性進(jìn)行判斷它是否已經(jīng)被關(guān)閉。
9) 控制窗口幾何大小可用moveTo()、moveBy()、resizeTo()、resizeBy()。滾動(dòng)可用scrollTo、scrollBy()。
10) 成焦點(diǎn)和失焦點(diǎn)可用 focus()、blur()。
11) location屬性代表當(dāng)前顯示文檔的URL。對(duì)其賦值使瀏覽器裝載新的URL(用Back按鈕能回退到原頁(yè)面)。其實(shí),它是Location類(lèi)的一個(gè)實(shí)例,它還有一個(gè)reload()方法可以裝載信的URL(用Back按鈕不能回退到原頁(yè)面)。
12) history屬性可看成是代表歷史URL的一個(gè)特殊數(shù)組,它的可讀length屬性表明數(shù)組的長(zhǎng)度。支持三種方法back()、forword()、go()。
13) 一個(gè)窗口中的任何框架都可以使用屬性frames、parent和top引用窗口中的其它框架。
14) 若框架指定了名字,引用就會(huì)被存儲(chǔ)到它的父Window對(duì)象的一個(gè)同名新屬性中。
15) 自定義的函數(shù)和構(gòu)造函數(shù)只在定義它的窗口中可見(jiàn)。別的窗口要先通過(guò)一個(gè)屬性來(lái)引用。但JavaScript默認(rèn)的函數(shù)和構(gòu)造函數(shù)會(huì)在每個(gè)窗口中擁有獨(dú)立副本。
16) onload()和onunload()事件分別在網(wǎng)頁(yè)裝載完成后和卸載前執(zhí)行。
1) Document類(lèi)的實(shí)例(即window.document)有forms[]、images[]、links[]、applets[]幾大數(shù)組。也可以通過(guò)與name屬性一樣的Document的屬性直接訪(fǎng)問(wèn)這些元素,或者通過(guò)數(shù)組的命名屬性訪(fǎng)問(wèn)。如:document.forms.f1 = document.forms.[“f1”]。
2) links[]代表文檔中的Link對(duì)象數(shù)組,由HTML的<a herf …>或者<area>定義,Link對(duì)象代表超級(jí)鏈接的URL,具有Location類(lèi)的所以屬性。
3) anchors[]代表文檔中的Link對(duì)象數(shù)組,由HTML的<a>定義。
4) applets[]代表文檔中的Link對(duì)象數(shù)組,由HTML的<applet>或<object>嵌入在文檔中的Applet對(duì)象組成。
5) embeds[]代表文檔中的Link對(duì)象數(shù)組,由HTML的<embed>或<object>嵌入在文檔的非Applet對(duì)象組成。
6) Write()方法可以生成網(wǎng)頁(yè)內(nèi)容,但只能在文檔被解釋時(shí)調(diào)用,即在<script>塊中調(diào)用。創(chuàng)建新文檔的標(biāo)準(zhǔn)格式為:xxx.document.open(); xxx.document.write(“ABC”); … xxx.document.close(); 其中的open()方法是可選的, JavaScript會(huì)隱式打開(kāi)一個(gè)新的文檔。
7) 用Image()構(gòu)造函數(shù)能產(chǎn)生一個(gè)屏外圖像,強(qiáng)迫瀏覽器裝載圖像,其onload事件處理程序能在圖片裝載后馬上執(zhí)行。
1) Form類(lèi)的實(shí)例代表一個(gè)HTML表單,通過(guò)Document的forms[]數(shù)組可以得到其實(shí)例。
2) elements[]數(shù)組代表表單中所有輸入元素,并可通過(guò)type屬性知道每個(gè)元素的具體類(lèi)型。
3) submit()方法和reset()方法分別用于提交或者重置表單。但與直接點(diǎn)擊按鈕不一樣,兩個(gè)方法不會(huì)出發(fā)對(duì)應(yīng)的onsubmit和onrest事件。
4) 如果HTML的<Form>定義了name屬性,則Document對(duì)象會(huì)多存儲(chǔ)一個(gè)同名屬性,指向該Form對(duì)象。各元素的情況類(lèi)似,同時(shí)如果表單中由多個(gè)HTML元素的name屬性相同,這些元素會(huì)被存放到一個(gè)數(shù)組中,按元素的出現(xiàn)順序排序。
1) 能用Document的cookie屬性對(duì)Web瀏覽器的cookie進(jìn)行操作,其屬性是一個(gè)特殊的字符串屬性。
2) cookie除了名值對(duì)外,還有四個(gè)可選屬性:expires——有效期、path——可見(jiàn)路徑、domain——可見(jiàn)域、secure——是否在安全協(xié)議間傳輸。
3) cookie值不能有分號(hào)、逗號(hào)或空白符,所以要用escape()方法進(jìn)行編碼,讀取時(shí)用unescape()進(jìn)行解碼。
4) cookie的默認(rèn)屬性通過(guò)字符串“;expires=…”的形式附加,其中有效期要用Data.toGMTString()格式化。
5) 要改變一個(gè)cookie的值,用同名字和新值再設(shè)置cookie一次。要?jiǎng)h除,將同名值、任意值加上一個(gè)過(guò)去的有效期來(lái)設(shè)置。
6) 讀取一個(gè)cookie時(shí),返回一個(gè)字符串,是name=value對(duì)的列表,用分號(hào)隔開(kāi)。
1) 可用Document對(duì)象的implementation.hasFeature()方法查詢(xún)是否支持特定的DOM特性。
2) Document中有childNodes、firstChild、lastChild、nextSibling、previousSibling來(lái)遍歷各個(gè)節(jié)點(diǎn)。
3) Document中的getElementsByTagName()方法返回指定HTML標(biāo)記類(lèi)型的數(shù)組。方法的參數(shù)不分大小寫(xiě),可用“*”來(lái)返回所有元素。
4) Document中的getElementsById()方法返回指定id的元素。
5) DocumentFragment是一種特殊類(lèi)型的節(jié)點(diǎn),自身不會(huì)出現(xiàn)在文檔中,只作為連續(xù)節(jié)點(diǎn)集合的臨時(shí)容器,用createDocumentFragment()創(chuàng)建。
1) CSS樣式由一個(gè)名/值的性質(zhì)對(duì)列表指定,性質(zhì)對(duì)之間用分號(hào)隔開(kāi),名稱(chēng)和值之間用冒號(hào)分隔。
2) 樣式性質(zhì)如果有“inherit”的話(huà),說(shuō)明它應(yīng)該繼承自己父元素的值。
3) 可用特殊快捷性質(zhì)把常常在一齊使用的樣式性質(zhì)組合在一起。就是“快捷性質(zhì)名:連續(xù)多個(gè)值”。如:font:bold italic 24pt Helvetica; 。
4) CSS的規(guī)則從一個(gè)選擇器開(kāi)頭,指定HTML元素(小寫(xiě)),用大括號(hào)括起屬性和值。用逗號(hào)分隔開(kāi)頭的選擇器名稱(chēng)表示樣式都適用于它們。若無(wú)逗號(hào)分隔,表示一個(gè)標(biāo)記嵌套在另一個(gè)標(biāo)記時(shí)適用。還可以用“.”號(hào)開(kāi)頭指定HTML元素的類(lèi),HTML元素的類(lèi)由HTML中的class屬性指定,可混用以上的兩種方法。用“#”開(kāi)頭指定適用于具體id的HTML元素。
5) 樣式表可以放在<head>部分的<style>和</style>標(biāo)記之間?;蛴?/span><link>引用。可混用以上兩種方法,在<style>標(biāo)記范圍內(nèi)用@import引用。
6) 用戶(hù)樣式覆蓋默認(rèn)樣式,作者樣式覆蓋用戶(hù)樣式,內(nèi)聯(lián)樣式覆蓋所有樣式。一個(gè)元素上應(yīng)用多個(gè)樣式,最為詳細(xì)規(guī)則定義的樣式將覆蓋不太詳細(xì)規(guī)則定義樣式相沖突的部分。
7) 只要position屬性不是被設(shè)為static,就可以用left、top、right、bottom這些性質(zhì)的任意組合來(lái)定義元素的位置。width、height定義大小,單位可以是:%、px(像素)、in(英寸)、cm(厘米)、pt(點(diǎn))、em(當(dāng)前字體行高)。
8) z-index默認(rèn)為0,值越小越先被繪制,此規(guī)則只適用于同一容器內(nèi)的子元素。
9) visibility、display都可以控制可見(jiàn)性,同設(shè)為none時(shí),在常規(guī)的流布局中,visibility是分配了空間,display沒(méi)有分配空間。
10) 用overflow指定超出元素邊框是的處理。用clip確定顯示元素的哪些部分。用rect指定具體區(qū)域。
11) 在JavaScipt中,獲取了一個(gè)HTML元素后,就可以通過(guò)元素的style屬性獲取那個(gè)元素的CSS2Propertites對(duì)象。設(shè)置這些屬性與設(shè)置HTML元素的style性質(zhì)中的效果一樣。但無(wú)法用JavaScript來(lái)設(shè)定樣式表的信息。同時(shí)緊記,在使用CSS2Propertites對(duì)象的樣式屬性時(shí),所有值都必須是字符串(要加上引號(hào)),有單位的情況也記得加上單位。CSS2Propertites沒(méi)有提供查詢(xún)CSS級(jí)聯(lián)的方法,也沒(méi)有提供判斷應(yīng)用于特定元素的完整樣式集合的方法。
12) JavaScript中CSS性質(zhì)的命名規(guī)范:去掉CSS性質(zhì)名中包含的所以連字符(減號(hào)),且把原來(lái)緊接在連字符后的字母改成大寫(xiě)。若CSS性質(zhì)對(duì)應(yīng)有float屬性,給屬性要加上css前綴,變成cssFloat。
1) 主要的基本事件:onabor、onblur、onchange、onclick、onerror、onfocus、onkeydown、onkeypress、onkeyup、onload、onmousedown、onmouseout、onmouseover、onmouseup、onrest、onresize、onselect、onsubmit、onunload。
2) 事件處理程序被設(shè)置為JavaScript代碼串,作為HTML的性質(zhì)值,并在Document對(duì)象中有同名的JavaScript屬性映射。當(dāng)通過(guò)JavaScript進(jìn)行訪(fǎng)問(wèn)時(shí),事件處理程序的屬性時(shí)函數(shù)。要通過(guò)JavaScript把一個(gè)事件處理程序賦給一個(gè)文檔的元素,只要把事件處理程序?qū)傩栽O(shè)置為想用的函數(shù)即可,應(yīng)該把函數(shù)自身賦予事件處理程序?qū)傩?,而不是調(diào)用函數(shù)的結(jié)果,所以函數(shù)名稱(chēng)后無(wú)需加括號(hào),或者用匿名函數(shù)。
3) 可以用JavaScript直接調(diào)用事件處理函數(shù),但這不是模擬事件發(fā)生的真實(shí)狀況,只是執(zhí)行定影行為的那個(gè)屬性值的函數(shù)。
4) 顯式地調(diào)用事件處理函數(shù)可以通過(guò)JavaScript擴(kuò)展HTML代碼定義地事件處理函數(shù)(AOP??。纾?/span> var oldHandler = b.onclick; function newHandler(){…} b.onclick = function() {oldHandler(); newHandler()} 。
5) 如果瀏覽器執(zhí)行某種默認(rèn)動(dòng)作來(lái)相應(yīng)一個(gè)事件,那么返回false可以阻止瀏覽器執(zhí)行那個(gè)動(dòng)作。一個(gè)例外是鼠標(biāo)移動(dòng)到一個(gè)超鏈上,要阻止默認(rèn)動(dòng)作,onmouseover事件處理程序要返回true。
6) HTML性質(zhì)的事件處理程序作用域的頭是調(diào)用的對(duì)象,下一個(gè)是觸發(fā)事件處理程序的事件對(duì)象,還會(huì)延伸到包容層,最終到達(dá)Window對(duì)象。同時(shí),作用鏈的精確構(gòu)成尚未標(biāo)準(zhǔn)化,不同的瀏覽器有不同的實(shí)現(xiàn)。理想的方法是讓它們只調(diào)用在別的地方定義的全局函數(shù)。
7) 在IE4~6中,用Event對(duì)象提供發(fā)生事件的詳細(xì)情況,它是Window對(duì)象的一個(gè)屬性(全局)。
8) 利用onPropertyChange事件,可捕捉多種情況,例如鍵盤(pán)輸入、粘貼等,是捕捉對(duì)象內(nèi)容改變的良好方式。
1) 同源策略:一個(gè)腳本只能讀取與它同源的窗口或文檔屬性。如果兩個(gè)窗口(或框架)含有的腳本把domain設(shè)為相同,他們就自動(dòng)滿(mǎn)足此策略。
1) JavaScript可以訪(fǎng)問(wèn)Applet的公共字段和方法。
2) Java與JavaScript的所有交互都能由netscape.javascript.JSObject類(lèi)的實(shí)例來(lái)處理??上Р还苁?/span>Netscape還是IE都有bug!
3) Nescape的LiveConnect技術(shù)還允許JavaScript程序?qū)嵗约旱?/span>Java對(duì)象并使用他們,但IE不支持!
1) 把合理的字符串轉(zhuǎn)換成數(shù)字的簡(jiǎn)單方法:表示數(shù)字的字符串變量 – 0 。
2) 把數(shù)字轉(zhuǎn)換成字符串的簡(jiǎn)單方法: 數(shù)字(或數(shù)字變量) + “” 。
3) 用String類(lèi)的localeCompare()方法對(duì)中文字排序,能出到按拼音排序的效果。
4) 利用Number類(lèi)的toFixed()方法,可以格式化小數(shù)位數(shù)。
5) 用Window對(duì)象的 showModalDialog()方法可以打開(kāi)一個(gè)模態(tài)窗口,showModelessDialog()可以可以打開(kāi)一個(gè)非模態(tài)的窗口。
1) 大部分的HTML元素都會(huì)以其name屬性在JavaScript環(huán)境中映射為屬性,所以為HTML元素起名字要非常小心,不要覆蓋主要JavaScript的對(duì)象名稱(chēng)或者方法名稱(chēng)。
2) 不能在JavaScript代碼中出現(xiàn)“</script>”,哪怕是字符串。若要出現(xiàn)該字符串,至少要表示為:”</” + “script>” 的形式。
聯(lián)系客服