天天看點

初學javascript所記的筆記

          JavaScript語言本身和java語言沒有任何關系

        JavaScript實作

JavaScript的核心ECMAscript描述了該語言的文法和基本對象。

DOM描述了處理網頁内容的方法和接口。

BOM描述了與浏覽器進行互動的方法和接口。

   一個完整的javascript實作是由 ECMAScript DOM BOM  3個不同部分組成的

               JavaScript重要的學習五點

   1、基礎文法  ECMAScript

   2、數組,函數,對象

   3、DOM    動态的改變文本流

   4、BOM

   5、AJAX

          javascript構成簡說

ecmascript描述了以下内容:文法,類型,語句,關鍵字,保留字,運算符,對象

    DOM描述以下内容:對文檔的操作

DOM 視圖-描述跟蹤文檔的各種視圖(即css樣式化之前和css樣式化之後的文檔)

DOM 事件-描述事件的接口

DOM 樣式-描述處理基于CSS樣式的接口

DOM 周遊和範圍-描述周遊和操作文檔樹的接口

BOM大概描述一下内容:  對浏覽器的操作

BOM主要處理浏覽器視窗和架構,不過通常浏覽器特定的javascript擴充都被看做BOM的一部分。這些擴充包括:

彈出新的浏覽器視窗

移動、關閉浏覽器視窗以及調整視窗大小

提供web浏覽器詳細資訊的定位對象

提供使用者螢幕分辨率詳細資訊的螢幕對象

對cookie的支援

ie擴充了BOM,加入了ActiveXObject類,可以通過javascript執行個體化ActiveX對象

          javascript特性

腳本編寫      基于對象       簡單  安全   動态   跨平台

           javascript優缺點

1、javascript可以友善地操縱各種浏覽器的對象,可以使用

2、javascript來

         javascript注釋方法//單行注釋   中間為多行注釋

          javascript代碼  嵌入式 連結式 導入式   document.wirte()

        嵌入式

<html>

    <head>

    <script language="javascript" type="text/javascript">

   alert('HELLO')

</script>

  </head>

<body>

</body>

</html>

         連結式

<script type="text/javascript" src="js/1.js"></script>  js支援改名的,隻要把type寫上,寫成1.ttt都沒問題

         javascript常見提示框

1警告框

alert(内容)

2、确認框

confirm(内容)有确定 取消兩個按鍵 

3、會話框

prompt(内,容)内對應的是标題,容對應的框裡面的預設值

            javascript常用的轉移字元

       符号                  代表意

       \'                       '

       \"                       "

       \n                       換行

       \\                        \

            javascript變量申明

差別大小寫,var 申明時指派 定義 才可以彈出内容

1、在變量申明的時候無需指定類型

2、在申明變量的時候通過var 關鍵字

3、變量名字區分大小寫

4、經常使用注釋

var 變量名 = 變量值;

            javascript變量命名規範

1、必須以字母、下劃線和$開頭

2、變量名命名要有意義,一般采用駝峰發

3、餘下的字元可以是下劃線、美元符号或任何的字母、數字

4、最長為255個字元

5、不能有空格,大小寫敏感

6、不能使用javascript中的關鍵字或保留字命名

                javascript變量類型

 undefined-未定義類型 未被指派的變量,值為undefined

null-空類型         值為null,尚不存在的對象

string-字元串類型    值用引号括起來

Boolean-布爾類型     值為true/false

number-數字類型        任何數字(數字類型包含nan,int,float,且所有數字類型均用64位浮點數格式表示,數組索引采用32位整數)

可以使用   typeof(object)來擷取object的類型

               javascript變量顯式轉換

類型轉換     

         javascript是弱類型語言,變量的類型對應于其值得類型,可以對不同類型的變量執行運算,解釋器強制轉換資料類型,然後進行處理如:

               運算                      結果

     數值與字元串相加                 将數值強制轉換為字元串

    布爾值與字元串相加                将布爾值強制轉換為字元串   (true或者false轉成字元串)

    數值與布爾值相加                   将布爾值強制轉換為數值   (布爾值當中的true轉成1,false轉成0)

NaN,null,undefined,‘’,0,‘false’在判定時自動轉成false  上面6個值,null=undefined,NaN永遠不和任何值相等,在數字或者字元串前面加上2個!!可轉換成布爾值

 強制轉換方式  強轉數字Number() 強轉字元串String() 強轉Boolean()轉不對會顯示NaN

             javascript自定義函數

js函數介紹

(1)函數也是一段js代碼,它自定義一次,單可能不執行或者調用任意次;

(2)函數可以有0個或者多個參數(形參和實參),同時支援一個傳回值;

(3)函數即對象

(4)可以将函數指派給變量,或者作為參數傳遞給其他函數,可以設定它們的屬性,可以調用它們的方法;

               函數定義

(1)使用單獨定義

         function 函數名(arg1,arg2,arg3......){

       code

}

(2)  使用變量指派

     var fun=function(arg1,arg2,arg3......){

      code

}

(3)   使用構造函數

      var fun=New Function(arg1,arg2,arg3.....,code....)

同一種方式申明的函數如果重名後面會覆寫函數;

如果不同方式申明函數同名,則變量定義的方式優先;

      javascript函數嵌套

function textFun(a,b){

        function 函數名(a){return a*a;};

          return 函數名(a)+函數名(b);

}

1,調用函數隻需要使用 變量名();或者函數名();即可

2,使用函數嵌套必須要注意,在函數體内的函數(也就是嵌套函數),隻能在父級函數内調用,不能在全局調用和其他函數中調用;

 ruturn語句在同方法當中後面的語句都不會執行;把值當作目前方法的結果

   document.write(“文本内容”)

     javascript函數遞歸

function fact(num){

         if(num<=1){

  return 1;

} else{

  return num*fact(num-1)

}

}

       (fact(5)意思為5*4*3*2*1)

       javascript全局變量和局部變量

1、全局變量,在函數體外申明就是全局變量,在函數内部可以使用

2、局部變量,在函數内部用var申明的變量就叫做局部變量;

var i=‘全局變量’

function test(){

    var i=‘局部變量’;

    alert(i);//輸出局部變量

}

alert(i);輸出全局變量

         arguments 對象

arguments對象主要用于擷取函數形參相關的資訊,比如可以直接或許形參的值,擷取形參的長度。擷取目前函數

主要特性:

arguments[]

數組隻在函數體内定義。在函數體内,arguments引用該函數的arguments對象。該對象有帶編号的屬性,并作為一個存放傳遞給函數的所有參數的數組。辨別符arguments本質上是一個局部變量,在每個函數中都會被自動申明并初始化。它值在函數體重才能引用arguments對象,在全局代碼中沒有定義。

arguments.callee 單簽正在運作的函數 調自己整個的

arguments.callee.length;函數自身參數個數(形參)

arguments.length 傳遞給函數的參數的個數(實參)外面的運作函數參數下午 2:27

     javascript數組介紹

(1)數組(array)是資料的結合,在js中,數組是一種基本的資料類型,該資料類型是複合型,一個數組可以包含多個元素,且每個元素都可以是任何資料類型

(2)在js中資料并不支援多元數組,以及關聯數組,但缺可以實作多元數組和關聯數組的功能,這其實使用對象模拟來實作的;

delete 删除某一下标的值,鍵不會被删除

設定速度的長度,比如某個資料長度為兩個值,設定length為1,則将第二個的值和鍵一起删除

删除 splice  Array.splice(起始的下标,結束的下标) 删除下标為1的鍵和值(1,1,)傳回數組

toString() 将數組轉成字元串 傳回字元串 對原數組無影響

join 自定義轉字元串 可以修改分隔符 Array.join("-") 通過-分割 對原數組無影響

傳回值不會分割二維的數組

數組連結 concat   Array.concat(多個數組逗号隔開) 對原數組無影響,傳回值為新組合數組

Array.pop()删除數組最後一個元素,并傳回删除後的值

Array.shift() 删除數組的第一個元素,并傳回删除後的值

Array.unshift()在資料的最前頭添加一個值,并影響數值,傳回修改後的值得個數

Array.push()和 unshift 一樣,在最後增加值

Array.reverse()颠倒順序 傳回颠倒的數組,并對原數組影響

Array.sort() 排序 預設順序:數字 》 字母 》漢字》undefined

Array.slice(開始,結束) 提取數組裡面的值 包含起始位置的值,但不包括結束位置的值

Array.splice(起始的位置,結束的位置,替換的值)

     運算符語句

+ 運算符  同類型直接運算, 不同則是連結符的作用

- * / %(取模) 強行将字元串轉換成數字類型,進行運算,無法運算結果顯示NaN

++

++i var a=i+1;

i++ var a=i; a+1;

例子 var a=10; a = i++ + i--; a的值為21;因為++ -- 的優先級比+ - 高

+= -= *= /=   i+=1;意思為 i=i+1;

== 比較符  兩邊的值是否相等 傳回布爾型

=== 比的是類型 再加上值;

>= <= >或者=  <或者= 

字元串比較 是比較的長度 字元串和數字比較 字元串轉換成數字比較 無法相比較傳回false

|| or 或      && and  并

var yy = 123;

var xx = 'xxx';

var ss = yy || xx;

如果第一個值轉換為boolean 為true 則ss = yy;反之 則ss = xx;如果都是false;那應該就沒值了吧

三維運算 Boolean ?運算一:運算二;如果Boolean為true 執行運算一,反之執行運算二

對比if  if(boolean){運算一}else{運算二}

循環語句 for(var i=0;i<9;i++){運算語句}

while(boolean){運算語句}循環  如果Boolean成立 一直循環

do{運算語句}while(Boolean);按順序,至少會執行一次運算語句,如果Boolean成立繼續執行

switch(變量名){

case 1;

運算語句

break;

case 2;

運算語句

break;

case 2;

運算語句

continue;

default:

運算語句;

變量名為1時,執行第一條語句,continue為隻是跳出本次循環,以後的還會循環;break為跳出循環,不寫會繼續往下循環,沒有比對到,則執行default;

for(var 變量 in Array){

運算語句

}

周遊,将數組的循環指派給變量,直到循環到數組的最後一個值

delete 對象   删除成功傳回 true;通過var 申明的對象無法删除

in    檢查數組或者對象的下标或鍵是否存在

1 in Array 意為 Array中是否含有下标為1 的值;存在傳回true;左邊的操作數必須為一個可以成功轉成字元串類型的值,右邊必須為數組或者對象

javascript 對象

對象的概念

1、對象是一種複合型資料類型,可以講很多資料集中在一個單元中,對象通過屬性來擷取資料集中的資料,也可以通過方法來實作資料的某些功能;

2、對象通常會使用很多變量來描述一些實物的屬性,例如一個名為COLOR的變量,該變量有可能會用來描述一個東西的顔色,比如說筆的顔色,水桶的顔色等,如果一個程式裡有多個實物,那麼久有可能要用多個變量來描述這些實物的顔色;那麼對象就是把這些看上去雜亂無序的變量按邏輯進行分類;

3、對象的值可以是任何類型;

4、對象是可以被繼承;

建立對象

var obj = new Object();建立一個對象

var obj = {};json方式建立一個空對象

var obj = new Object('類型') 建立一個基于類型的對象

var arr = new Array();穿件一個數組對象

var str = new String();建立一個字元串對象

var bol = new boolean();建立一個布爾類型對象

var obj = {name:"muzhi",age:18,arr:[1,2,3],fun:function(){alert("xxx")}};

var obj = new test();//構造函數  申明時會自動觸發

對象的廢除和屬性删除

删除對象屬性 delete obj.name 

清空整個對象 obj = null;

  對象中的this的用法

this 誰調用誰this就是誰

call(對象,a,b,c)第一個必須是對象,而且是調用

常用對象

字元串常用對象

搜尋字元串當中指定的字元串出現的位置

str.indexOf() 裡面填寫字元串,傳回值為字元串所在的上一個位置,不存在傳回-1

str.lastIndexOf() 是找到最後一個能和字元串裡面的比對的字元串的位置

str.search() 搜尋 但是可以使用正則

str.replace() 第一個填寫需要替換的内容,第二個填寫換成的内容,傳回替換後的字元串,如果不存在傳回原字元串

str.match() 搜尋到傳回搜尋的結果,搜尋不到傳回null 原字元串不變,前面的都不變

str.slice(3,4) 截取 第一個寫開始但截取不包括的位置,第二個寫結束位置,傳回截取字元串,結束的位置字元串沒這麼長,截取到最後對原字元串無影響

str.substr() 截取 第一個寫開始的但不包括位置, 第二個寫截取的長度

str.substring()于slice相同

str.toString() 轉換成字元串

str.contact() 字元串連結,括号内寫連結的字元串,傳回連結後的字元串,對原字元串無影響

str.length   傳回字元串的長度

str.charAt() 括号内寫一個數字 傳回這個數字位置的字元

str.charCodeAt() 傳回這個數字的編碼

str.toLowerCase() 将字元串轉換成小寫

str.toUpperCase() 将字元串轉化成大寫

str..split("")  分割方法  按括号内的符号,将字元串分割成數組

判斷a是否是數組 a  instanceof Array 如果是 傳回true

match 對象常用方法

Math.ceil(num) 有小數點 取整時 個位數加一位

math.floor(num) 取整 直接把小數點以後去除

如果是負數,它兩個相反

Math.min(1,2,3) 取裡面最小的數

Math.max(1,2,3) 取裡面最大的數

Math.round(num) 四舍五入

Math.abs(num) 傳回相反數

Number.MAX_VALUE 最大數值

Number.MIN_VALUE最小數值

Number.POSITIVE_INFINITY        正無窮大

Number.NEGATIVE_INFINITY        負無窮大

Number.toString() 将數字轉換成字元串

時間

Js擷取目前日期時間及其它操作

var myDate = new Date();

myDate.getYear();        //擷取目前年份(2位)

myDate.getFullYear();    //擷取完整的年份(4位,1970-????)

myDate.getMonth();       //擷取目前月份(0-11,0代表1月)

myDate.getDate();        //擷取目前日(1-31)

myDate.getDay();         //擷取目前星期X(0-6,0代表星期天)

myDate.getTime();        //擷取目前時間(從1970.1.1開始的毫秒數)

myDate.getHours();       //擷取目前小時數(0-23)

myDate.getMinutes();     //擷取目前分鐘數(0-59)

myDate.getSeconds();     //擷取目前秒數(0-59)

myDate.getMilliseconds();    //擷取目前毫秒數(0-999)

myDate.toLocaleDateString();     //擷取目前日期

var mytime=myDate.toLocaleTimeString();     //擷取目前時間

myDate.toLocaleString( );        //擷取日期與時間

js DOM 操作

一個對象   4種擷取  7種關系

1、對元素的添删改查(标簽)

2、對元素的屬性的添删改查(html屬性,css屬性)

3、對元素所包含的内容的添删改查

節點

根據DOM,HTML文檔中的每個成分都是一個節點

DOM是這樣規定的:

整個文檔是一個文檔節點

每個HTML标簽是一個元素節點

包含在HTML元素中的文本是文本節點

每一個HTML屬性是一個屬性節點

注釋屬于注釋節點

節點資訊分類

每個節點都擁有包含着關于節點某些資訊的屬性。這些屬性是:

nodeName(節點名稱)

nodeValue(節點值)

nodeType(節點類型)

元素節點的nodeName 是标簽名稱

屬性節點的nodeName 是屬性名稱

文本節點的nodeName 永遠是#text

文檔節點的nodeName 永遠是#document

注釋:nodeName 所包含的xml 元素的标簽名稱永遠是大寫的

節點标示符

nodeValue

對于文本節點,nodeValue屬性包含文本。

對于屬性節點,nodeValue屬性包含屬性值。

nodeValue屬性對于文檔節點和元素節點是不可用的。

nodeType

nodeType屬性可傳回節點的類型

最重要的節點類型是:

元素類型 節點類型

标簽 1

屬性 2

文本 3

注釋 8

文檔 9

空格 換行 也算一個節點

四項擷取

1、getElementById(); 

擷取Id為什麼的節點;(Id 中的一種選擇器,有且為一)擷取一個對象

document.getElementById("id名");

在script标簽中加入defer=“defer” 等同于把标簽放在了html底部

在火狐谷歌裡面用obj.textContent來擷取元素節點的内容

2、document.getElementsByTagName("");

通過标簽名字來擷取,注意是個複數。通路哪一個需要按數組的形式通路,即使隻有一個,也要用複數形式

如:document.getElementsByTagName("p")[0];或者指派變量 obj[0]

3、document.getElementsByName();

用法同第二個,但是這個是擷取含有name的元素節點

3、document.getElementsByClassName();

也是複數,用法同第二個,通過class擷取,ie的9以上支援

建立節點

1、第一種方法,先把節點放到記憶體,然後通過變量使用

var 變量名 = document.createElement("div");//建立标簽 内容為<div></div>

var 變量名 = document.createTextNode("建立文本節點,這裡寫文本内容");

2、添加節點

父節點.appendChild(變量名);在某個節點中添加一個節點,傳回新節點引用

父節點.insertBefore(變量名,位置);預設最後面添加 比append多了一個功能,選擇位置,節點名.firstChild 是第一個子元素前面,傳回新節點引用

克隆 var 變量名 = 節點名.cloneNode(); 括号裡面加true 為複制标簽内所有内容全部複制 不加隻複制标簽

光克隆沒有意義,隻是放到記憶體裡面,然後還需要把變量添加到某個地方

節點擷取

引用子節點  elementName(節點名)

elementName.childNodes

elementName 節點下所有子節點數組

elementName.firstChild

elementName下的第一個節點

elementName.lastChild

elementName下的最後一個子節點

引用父節點

elementName.parentNode  elementName節點的父節點

elementName.parentElement elementName節點的父元素(IE)

因為 空格 換行 也算一個子節點,怎麼擷取父節點下面是标簽的子節點?

var li = ul[0].childNodes;//申明一個無序清單變量

 for(var eee in li){//周遊整個清單

if(li[eee].nodeType==1){//如果節點屬性為1,則為标簽

alert(li[eee].nodeName);//依次彈出标簽名字

}

}

擷取節點資訊

節點.nodeName  節點的名稱

節點.nodeType

節點的節點類型 1 element 2 attribute 3 text

節點.nodeValue   節點的文本内容  

擷取兄弟标簽

節點名.nextSibling.innerText  擷取下一個兄弟标簽 innerText為節點内容

節點名.previousSibling  擷取上一個兄弟标簽

節點值得擷取

innerText 起始和結束标簽内的文本(火狐不管用 火狐為textContent)

innerHTMl  起始和結束标簽内的HTML(IE)()

outerHTML  起始和結束标簽内的HTML(包含标簽本身 全部相容)

節點值得指派

節點.innerHTMl = "内容"; //直接指派

節點值擷取的相容性設定

利用隻有IE可辨識的document.all

if(document.all){

alert(節點.innerText);//IE 

}else{

alert(節點.textContent)//火狐辨識和谷歌都可以辨識

}

設定屬性節點                 

elementNode.setAttribute(attributeName,attributeValue)

舉例 設定一個a節點的class值

a.setAttribute('class','lianjie');

attributeName 屬性的名字 如href name value class

attributeValue 屬性的值用冒号括起來

elementNode.getAttribute(arributeName) 擷取節點屬性

舉例 彈出一個a标簽的href

alert(a.getAttribute("href"));

删除一個屬性

a.removeAttribute("值得名稱");

删除節點

節點.removeNode(true); 括号内加true 為全部删除,不加隻删除标簽,不删除内容(IE适用)

w3c标準删除

節點.parentNode.removeChild(節點);

表單操作

insertRow(0) 插入一行 tr  table.insertRow(0).innerText="這是添加一行清單,這裡是添加的文本内容"

insertCell(0) 插入一列 td 必須在tr中加 tr.insertCell(0).innerText="這是添加的第一個td,第二個括号内寫1"

rows[0] 擷取在表格第幾行 括号内寫第幾行

cells[0] 擷取表格中第幾行的 第幾列的節點

deleteRow(0)  删除一行 括号裡寫删除第幾個

deleteCell(0)  删除一列

createCaption  建立表格标題

擷取高度寬度

節點.clientHeight   padding+content 的高度

節點.clientWidth   padding+content 的寬度

兩個都不包括邊框和超出部分

offsetHeight  offsetWidth  padding+content+border 的高度和寬度

offsetTop offsetLeft 節點border距離定位的父元素的距離 

clientTop clientLeft 節點的content距離定位的父元素的距離 

scrollWidth/scrollHeight

可以傳回整個網頁或某個元素的可視内容的寬度或者高度以後,加上滾動條可以滾動的内容距離值,也就是超出可視區域後額外的那些距離的高寬度;即使是空白的内容也會有效,就是 它們會傳回的正确的值,注意該屬性不包括邊框和垂直滾動條的高寬度值

scrollLeft屬性與scrollTop屬性的作用相同,擷取滾動條被拉動  移動的距離數值;

繼續閱讀