初學javascript所記的筆記
阿新 • • 發佈:2019-01-10
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屬性的作用相同,獲取滾動條被拉動 移動的距離數值;
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屬性的作用相同,獲取滾動條被拉動 移動的距離數值;