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