1. 程式人生 > >初學javascript所記的筆記

初學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屬性的作用相同,獲取滾動條被拉動  移動的距離數值;