【筆記】——Javascript(1)


一.JavaScript簡介

JavaScript的組成:ECMAScript、DOM、BOM

ECMAScript

1)它定義了腳本語言的所有屬性、方法和對象。

2)JavaScript/ActionScript/ScriptEase等其他語言通過實現ECMAScript作為其功能的基准。

DOM

1)每個瀏覽器都有其自身ECMAScript接口的實現,這些ECMAScript接口被擴展成DOM、BOM等。

2)根據W3C的DOM規范,DOM接口與瀏覽器、平台、語言無關,故用戶可以訪問頁面的其他標准組件。其解決了訪問站點中的數據、腳本和表現層對象時,一些瀏覽器和系統的沖突。

3)DOM把整個網頁規划成,由節點層級構成的文檔。

BOM

1)常見功能:彈出/移動/關閉/調整 瀏覽窗口;提供Web瀏覽器相關信息的導航對象;提供頁面詳細信息的定位對象;提供屏幕分辨率參數的屏幕對象;支持cookie;不同瀏覽器自身的新特性(如IE的ActiveX類)...

 

二、Web標准

——Web標准概述

1)Web標准為一系列標准的集合。

    網頁分為結構Structure、表現presentation、行為Behavior。

 

三、JavaScript基礎

——JavaScript語法

1)  區分大小寫。

2)  若類型變量。

3)  行尾的分號可有可無。

4)  括號用於代碼塊。

5)  注釋方式同於C和Java。

——變量

1)可不用聲明或用var(variable)關鍵字聲明變量。可同時聲明多個。

2)名稱規則:①首字符可為字母/下划線/美元符,其后還可有數字。

             ②變量名不能為關鍵字和保留字。

             ③3種標記規則:Camel/Pascal/匈牙利標記法

——9種數據類型

String、Number、Boolean、Object、Undefined、Null

和3種在JS運行時中間結果的數據類型Reference、List、Completion

1)字符串

①獲取字符串 個數:length屬性。【雙字符算一個字符】

②獲取 指定位置的字符:charAt()方法

③獲取 子字符串:slice()、substring()、substr()

    slice()和substring()都接受兩個參數,指起始位置和終止位置,不包含終止字符。可忽略第二個參數。

        區別在於負數參數:前者負數從末端計數。后者負數歸0,較小數為始,較大數為終。

    substr()的首參數為起始位置,次參數為長度。

④搜索 子字符:indexOf()、lastIndexOf()

    indexOf()往前搜。lastIndexOf()往后搜。返回指定字符的位置,找不到則返回-1。

        可設置第2參數指定開始搜索位置。位置都是從前面的0下標開始。

2)數值

①var num = 7e5; //其中“7e5”表示“700000”。

②toExponential()用於將數值 轉換為 科學計數法。參數表小數位數。

3)布爾型

只有true和false兩個值。

    typeof()返回變量的類型。

4)類型轉換

①轉換為 字符串型:toString()參數可指定要轉換成的進制數

②轉換為數字型:parseInt()轉換為整數。parseFloat()轉換為浮點數。都從0位置開始,檢查到非數值時結束。參數可指定要轉換成的進制數。

字符串型、數字型、布爾型都屬於離散型。離散的變量只能存儲一個值,存儲一組值的變量需使用數值array。

5)數組

①由相同名稱的多個值構成的集合。

②由Array關鍵字聲明,可同時制定個數/長度length:var aTeam = new Array(12): //長度可容12個元素

                      直接用參數創建元素:var aMap = new Array(“China”,“USA”,“Britain”):

③由方括號[]聲明:var aMap = [“China”,“USA”,“Britain”]:

④數組 轉換為 字符串:toString()。

⑤指定數組的 連接符:join()參數為連接數組項的字符串。無參數等同toString();空字符串表不用連接符;

⑥字符串 轉換為 數組:split()參數為分隔字符串的標識。

⑦使數組元素 反序:reverse()【字符串沒有類型方法,但可通過split()轉換為數組反序后用join()轉回字符串】

⑧使數組元素 按字母排序:sort()

——函數

1)arguments對象:可訪問函數的參數【通過下標】。

                   function aFunc(){if(arguments[0]==“aWord”){do something}:}

    函數參數個數:arguments.length

2)ECMAScript不會檢驗傳遞給函數的參數個數是否超過函數定義的。【Netscape文檔表面最多26個】任何遺漏的參數都以undefined形式傳給函數,多余的參數回被自動忽略。

——其他對象

1)對象是自我包含的數據集合。訪問對象數據2種方式:屬性和方法。【屬性是對象中的變量,方法則是函數】

    創建對象:new關鍵字。var myCar = new Car();

2)Date對象

①ECMAScript把日期存儲為距離UTC時間1970年1月1日0點的毫秒數。【協調世界時UTC由原子鍾提供】

②計算 程序運行速度:在程序始末各創建一個時間對象,通過第二個時間對象減去前面的,得出運行時間。

③參數 初始化時間對象:

    new Date(“month dd,yyyy hh:mm:ss”);

    new Date(“month dd,yyyy”);

    new Date(yyyy,mth,dd,hh,mm,ss);

    new Date(yyyy,mth,dd);

    new Date(ms);

    yyyy:4位數年份。   month:英文月份。   mth:月份0-11。   dd:日數1-31。

    hh:小時數0-23。    mm:分針數0-59。    ss秒數。          ms:毫秒數。

※ new Date()在不同瀏覽器中顯示格式不同。【即輸出的字符串不同】

④獲取時間:

    aDate.getFullYear()     四位數年份。

    aDate.getYear()         不同瀏覽器,返回兩位或四位數年份【不推薦】

    aDate.getMonth()        月份0-11

    aDate.getDate()         日期1-31

    aDate.getDay()          星期0日-6六

    aDate.getHours()        小時數0-23

    aDate.getMinutes()      分鍾數0-59

    aDate.getSeconds()      秒數0-59

    aDate.getMilliseconds() 毫秒數0-999

    aDate.getTime()         返回從GMT時間1970年1月1日0點0分0秒至aDate的毫秒數

⑤設置時間:aDate.setFullYear...()

——數學計算:Math對象

1)常用屬性:   Math.E:e自然對數的底      Math.PI:π圓周率      Math.SQRT2:2的平方根

2)最值:min()、max()返回一組數的最小/大值。

3)小數 轉換 整數:ceil()向上取整、floor()向下取整、round()四舍五入

4)生成隨機數:random()  返回0和1中間的隨機數,不包含0和1。

    返回1-100中的隨機數:var aNum = Math.floor(Math.random()*100+1);【包含1和100】

    返回2-99中的隨機數:var aNum = Math.floor(Math.random()*99+2);【包含1和100】

※通常將隨機選擇打包成一個函數,需要時再調用

function selectFrom(firstVal,lastVal){

    var sum = lastVal–firstVal + 1;

    return Math.floor(Math.random()*sum + firstVal);}

5)Math的其他方法:Math.abs(x)返回x的絕對值....

——BOM基礎

JS提供一些對象用於與瀏覽器窗口的交互。

這些對象包括:window、document、location、navigator、screen等。統稱為BOM。

1)window對象

表示整個瀏覽器窗口。

①4個常用方法:moveBy(dx,dy)  向右移動dx像素,向下移動dy像素。

                moveTo(x,y)   移動到相對用戶屏幕的(x,y)處。

                resizeBy(dw,dh)相對當前,寬度增加dw像素,長度增加dh像素。【負數為縮小】

                resizeTo(w,h)  寬度調整為w像素,高度調整為h像素。【不能用負數】

②打開新窗口:open()

四個參數:冒號包圍,逗號分隔。

    1新窗口url

    2新窗口名稱【_blank/_self/_parent/_top/框架名】【與a元素的target屬性相同】

    3新窗口是否替換當前頁面的布爾值

    4特性字符串說明:left、top:新窗口坐標。          width、height:新窗口寬高。

                     resicable:是否可拖動調整大小。  scrollable:是否使用滾動條。【默認no】

                     toolbar、status、location:【默認no】是否顯示工具欄、狀態欄、地址欄。

③關閉窗口:close()

④彈出信息:alert()   單向對話框。一個確定按鈕。

            confirm() 返回一個布爾值。一個確定按鈕和一個取消按鈕。

            prompt()  返回一個字符串。兩個參數:腳本提示、默認值。

⑤window的history屬性:盡管無法獲取歷史頁面的URL,但通過history屬性可訪問歷史頁面。

    使瀏覽器后退一頁:window.history.go(-1);等同於window.history.back();

    使瀏覽器前進一頁:window.history.go(1); 等同於window.history.forward();

2)document對象

為window的一個屬性,故可訪問window的所有屬性和方法。即window.document == document為true。

①原本用於處理頁面文檔的功能被CSS和DOM取代,故現在主要用於讀寫一些網頁屬性/屬性集合。

        如,讀寫URL。導航到新窗口【在FF不通用】:document.URL=“http://xxx.com/y”;

②常用屬性:anchors 網頁中錨的集合。 由<a name=”anchorsName”>標記

          applets   applet集合。

          embeds    嵌入對象的集合。 由<embed>標記

          forms     表單的集合。

          images    圖片的集合。

          links     超鏈接的集合。   由<a href=“URL”>標記

e.g:var myLinks = document.links;

     myLinks[2].target = “_blank”;

③向瀏覽器直接插入HTML流:write()

    除非置於在<script>的頂層,否則使用事件句柄調用函數中的document.write()方法時,插入的內容會以覆蓋當前頁面的形式出現。

3)location對象

表示載入窗口的URL。用於分析和設置網頁URL。window對象和document對象的屬性。

①常用屬性:hash:若URL包含書簽#,返回該符號后面的內容。

            search:執行GET請求的URL中間號(?)后的部分。

            href:當前載入的完整URL。

            host:服務器名稱。

            pathname:URL中主機名后的部分。

            protocol:URL使用的協議。

            port:URL周明華請求的端口號。

②location.href屬性與document.URL屬性相似,皆可導航到新頁面。前者對各瀏覽器的兼容性更好。

    采用此方法導航,新地址會被加入到瀏覽器的歷史棧中,前個頁面之后,即可通過“后退”訪問之前的頁面。對於像安全級別較高的銀行系統 不希望用戶通過“后退”返回,可以用location.replace()方法代替。

③重新加載頁面:reload() 接受一個布爾值參數。true則從服務器上重載,false則從緩存上重載。

4)navigator對象

包含系列瀏覽器信息的屬性。可用於瀏覽器檢測。

①瀏覽器信息查詢:userAgent屬性

5)screen對象

用戶的屏幕信息。window對象的屬性。

屬性:width/height:屏幕寬高。

        availWidth/availHeight:窗口可使用的屏幕寬高。【[ə'veɪl]有用】

        colorDepth:用戶表示顏色的位數。

※全屏:window.moveTo(0,0);

        window.resizaTo(window.availWidth,window.availHeight);

 

四、CSS進階

傳統HTML缺點:維護困難、標記不足、網頁過胖、定位困難...

——<div>與<span>

1)<div>division塊級元素block-level element。

2)<span>行內元素inline element。

    故,<div>標簽可包含<span>元素,反之則不行。

——元素定位

1)float定位:在父級的content區域浮動。

2)position定位:4個值static/absolute/relative/fixed

        配合position定位的屬性:top/right/bottom/left

3)z-index空間位置:調整position定位時 重疊塊的上下位置。同值時按原有高低覆蓋關系。

五、DOM模型

定義了用戶操作文檔對象的接口。使開發者能將HTML作為XML文檔來處理。

——網頁DOM模型框架

DOM完成了 通過樹狀圖的這種划分關系,使整個HTML文檔結構清晰可見,各個元素之間的關系很容易表達出來。

——DOM模型中的節點

在DOM中有3種節點:元素/文本/屬性 節點。

1)元素節點(element node)

    可以說正個DOM模型都是由元素節點構成的。標簽p/li/h1等為元素節點的名稱。

    根元素為html。

2)文本節點(text node)

    文本節點被包含在元素節點內部。

3)屬性節點(attribute node)

    幾乎所有元素都有title屬性用於描述。

——使用DOM

 

1)訪問節點

①getElementByTagName()

返回相同標簽名的元素的NodeList

文檔的 DOM結構 必須在文檔加載完后 才能分析出來。故以上語句需在頁面加載后才能生效。

②getElementById()

返回指定id的元素。

※IE-Bug:當某元素的id值 與其前面某元素的name值相同時,此方法對name值元素作用有效,對id值元素無效。

    解決:最好的辦法是避免id和name值相同。

2)檢測節點類型

①通過nodeType屬性克檢測出節點類型。

    返回一個(代表節點類型的)整數值。有12個可取值。【document.nodeType返回9】

    元素節點返回1、屬性節點返回2、文本節點返回3【故,可對某種類型的節點做單獨處理,常用於搜索節點】

3)利用父子兄關系 查找節點

父子兄:DOM模型中節點之間最重要的3種關系。

①通過父子關系 獲取某節點的所有子節點:hasChildNodes()和childNodes屬性

    判斷是否有子節點:if(hasChildNodes()){dosomething}

    使用childNodes屬性 可遍歷所有子節點名 和顯示出來。

※IE7-Bug:再IE7中顯示出所有子節點名;在FF顯示出所有節點名外,之間的空格也會被當成子節點計算出來。

②反過來也可通過某節點 獲取其所有父節點:parentNode屬性。

    最近的父節點:var p = aNode.parentNode.lastChild;

③通過兄弟關系 讀寫同一層次的節點:previousSibling屬性、nextSibling屬性【因①中bug,故僅適用於IE】

解決兼容性:用while循環進行nodeType判斷 過濾掉“nodeType不為1或null”的值。

4)設置節點屬性

①getAttribute(“屬性名”)只能通過一個元素節點對象調用!不能用document對象調用。

②setAttribute(“屬性名”,“屬性值”)

5)創建和添加節點

①創建元素節點:createElement(“元素名”)

②創建文本節點:createTextNode(“文本”)

    【為元素節點添加-文本節點,即添加子節點:eleVar.appendChild(texVar)/該方法添加的位置,位於childNode位於列表尾部】

③創建文檔碎片節點:createDocumentFragment()

6)在特定節點前 插入節點

通過父節點的insertBefore()方法:同replaceChild()有兩個參數。

7)在特定節點后 插入節點

沒有直接方法,可自行編碼:判斷若為最后一個節點,則用appendChild()添加到末尾;否則添加到下一個兄弟節點的前面insertBefore()。

8)刪除節點

通過父節點的removeChild()方法:oP.parentNode.removeChild(oP)

9)替換節點

通過父節點的replaceChild()方法:olP.parentNode.removeChild(newP,oldP)

 

====================================================================

【筆記】——Javascript(2)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM