PART-6 JS中的函數和BOM
1、函數定義:
函數是由事件驅動的或者當它被調用時執行的可重複使用的代碼塊。
當調用該函數時,會執行函數內的代碼。
能夠在某事件發生時直接調用函數(好比當用戶點擊按鈕時),而且可由 JavaScript 在任何位置進行調用。
提示:JavaScript 對大小寫敏感。關鍵詞 function 必須是小寫的,而且必須以與函數名稱相同的大小寫來調用函數。
【函數的聲明及調用】
一、函數的聲明格式:
function 函數名 (參數1,參數2,參數3...){
函數體代碼
return 返回值
}
function saySth(str,color){
document.write("<div style='color:"+color+";'>"+ str+"</div>");
}
函數的調用:
①、直接調用:函數名(參數1的值,參數2的值,參數3的值...);
saySth("hahaha","blue");
②、在HTML標籤中直接使用事件名="函數名()"
<button onclick="saySth('hahaha','blue')">點擊按鈕,打印內容</button>.
二、函數的注意事項:
①、函數名必需要符合小駝峯法則:首字母小寫以後每一個單詞首字母大寫;
②、函數名後面的括號中,能夠有參數也能夠沒有參數,分別稱爲有參函數和無參函數。
③、聲明函數時的函數列表,稱爲形參列表,形式參數。(變量的名字)
function saySth(str,color){}
調用函數時的列表,稱爲實參列表,實際參數。(變量的賦值)
saySth("hahaha","blue");
④、函數的形參列表個數和實參列表的個數沒有實際聯繫;
函數參數的個數,取決於實參列表;
若是實參列表的個數<形參列表的個數,則未賦值的形參,將爲Undefined;
⑤、函數能夠有返回值,使用Return返回結果;任何代碼不能寫在return以後;
調用函數時,可使用一個變量接受函數的返回結果。若是函數沒有返回結果,則接受的結果爲Undefined;;
⑥、函數中變量的做用域:JS中只有函數有做用域;
在函數中,使用var聲明的變量爲局部變量只能在函數中使用。
不使用var聲明的變量爲全局變量在函數外也能訪問。
函數的形參列表默認爲函數的局部變量,只能在函數中使用。
⑦函數的聲明與函數的調用沒有先後之分,能夠在聲明函數以前調用函數。
eg:
func();
function func(){};
2、 【匿名函數的聲明使用】
function(){ }
一、聲明一個匿名函數,直接賦值給某一個事件;
window.onload=function(){}
二、使用匿名函數表達式。
將匿名函數,賦值給一個變量。
聲明:var func=function(){};
調用:func();
注意:使用匿名函數表達式時,函數的調用語句,必須放在函數的聲明語句後面!!!
三、自執行函數:
①、可使用多種運算符開頭,可是通常用!(結構清晰,推薦使用!)
!function(形參列表){
alert(123;)
}(實參列表)
②、使用()將函數及函數後的調用()包裹起來就能夠調用了。(可以代表匿名函數與調用的()是一個總體,是官方推薦的寫法!)
(function(形參列表){
alert(123;)
}(實參列表))
③、使用()包裹函數部分:(不推薦使用)
(function(){
alert(123)
})()
【函數的內部屬性】
1、Arguments對象:
①、做用:用於儲存調用函數時的全部實參,
當咱們調用函數,並使用實參賦值時,實際上參數列表已經保存到了srguments數組中,
能夠在函數中使用 arguments[n]的形式調用,n從0開始;
②、arguments數組的個數取決於實參列表,和形參列表無關。
可是,一旦第N個位置的形參、實參、arguments都存在時,形參將與arguments綁定,同步變化;
即在函數中修改形參的值,arguments也會改變,反之亦然。
③、arguments.callee 是arguments的重要屬性。表示arguments所在函數的引用地址。
在函數裏面,可使用arguments.callee()調用函數自己。
在函數內部,調用函數自身的寫法叫作遞歸。
遞歸分爲兩部分:以遞歸調用語句爲界限,能夠將函數分爲上下兩部分
遞:↑ 當函數執行上半部分,遇到自身的調用語句時,繼續進入內層函數,在執行上半部分。直到執行完最內層函數。
歸:↓ 當內層函數執行之後,在從最內層函數開始,逐漸執行函數的下半部分。
當最外層函數執行時,遇到自身的調用語句,會進入內層函數執行,而外層函數的後半部分暫不執行。
直到內層函數執行完之後,在逐步向外執行。
var num = 1;
function func(){
console.log(num);
num++;
if(num<=4){
arguments.callee();
}
num--;
console.log(num);
}
func();
[JS代碼的執行順序問題]
JS代碼在運行時會分爲兩大部分:檢查裝載部分、執行階段;
檢查裝載階段:會先檢查代碼的語法錯誤,進行變量、函數的聲明;
執行階段:變量的賦值、函數的調用均爲執行階段;
如下代碼爲例:
consoloe.log(num); >>undefined;
var num=10;
func1();
function func1(){ }; >>函數能夠正常執行;
func2();
var func2 = function(){ }; >>函數不能執行,打印func2時顯示undefined;;
緣由以下:代碼執行順序以下:
---------檢查裝載階段---------
var num
func1();
var func2
---------代碼執行階段---------
consoloe.log(num); >>undefined; var num=10;
function func1(){ };
func2(); = function(){ }
2、JS中的BOM:
1、【screen 對象】
屏幕寬度-- console.log(screen.width)
屏幕高度-- console.log(screen.height)
可用寬度-- console.log(screen.availWidth)
可用高度-- console.log(screen.availHeight) =屏幕高度-底部狀態欄高度;
2、【location 對象】
一、 取到瀏覽器的URL地址信息;
完整的URL路徑:
協議名://主機名(ip地址):端口號/文件所在路徑?傳遞參數 (name1=value1&name2=value2)#錨點
eg:
http://127.0.0.1:8020/wenjianjia/index.html?name1=value1&name2=value2#aaa
console.log(location)
console.log(location.href);//返回當前完整路徑;
console.log(location.protocol);//返回協議名;
console.log(location.host);//返回主機名+端口號;
console.log(location.hostname);//返回主機名;
console.log(location.port);//返回端口號;
console.log(location.pathname);//文件路徑;
console.log(location.search);//返回?開頭的參數列表;
console.log(location.hash);//返回#開頭的錨點;
二、 使用JS跳轉頁面的方法:
Window.location="http://www.baidu.com";
細分幾種使用location跳轉頁面的類型:
l
ocation.replace("http://www.baidu.com"); 使用新的文檔替換當前文檔,替換之後,不能退回。
location.assign("http://www.baidu.com");加載新的文檔,加載以後,能夠退回。
location.repload();從新加載當前頁面,即刷新頁面;
①、 location.repload(true) 強制刷新頁面,從服務器端從新加載頁面----Ctrl+f5;
②、 location.repload() 在本地刷新當前頁面---f5
3、【history 瀏覽歷史】
history.length 瀏覽歷史列表的個數;
history.back(); 後退
history.forward(); 前進
history.go(); 跳轉到瀏覽歷史的任意一個頁面;0表示當前頁面;-1表示後一個頁面。1表示前一個頁面;
4、【navigator 瀏覽器信息】
瞭解便可
console.log(navigator);檢測瀏覽器的各類插件系統信息。
navigator.plugins;檢測瀏覽器裏安裝的各類插件;
5、【Window對象的經常使用方法:】
>>>在window對象中的全部屬性和方法都可以省略window關鍵字;
一、alert() 彈出一個警告提示框;
二、prompt() 彈窗接受用戶的輸入;
三、confirm() 彈出帶有"肯定"/"取消"按鈕的提示框,點擊按鈕返回true/false;
四、close() 關閉當前瀏覽器窗口,在個別瀏覽器中,腳本語言不得關閉非腳本打開的窗口。
只能關閉使用超連接、window.open()打開的窗口;
五、window.open()打開一個新窗口。
參數1:新窗口的地址
參數2:新窗口的名字,沒卵用,很雞肋;
參數3:新窗口的各類屬性設置:"屬性1=值1,屬性2=值2,...."
六、setTimeout() 設置延時多久執行,只執行一次;
接受兩個參數:須要執行的函數、延遲時間。
七、setInterval()設置定時器,每隔n毫秒執行一次;
接受兩個參數:須要執行的函數、間隔時間。
八、clearTimeout();清除延時器
clearInterval();清除定時器
使用方法:設置延時器或者定時器時,可使用變量接受定時器ID;
var id = setInterval;
調用clearInterval時,將id傳入,便可消除對應的定時器;
clearInterval(id);
PART-7 JS中的DOM操做
文檔樹(Document Tree)是HTML頁面的層級結構。
它由元素、屬性和文本組成,它們都是一個節點(Node),就像公司的組織結構圖同樣。
【DOM樹節點】
DOM節點分爲三大類:
元素節點、文本節點、屬性節點;
文本節點、屬性節點屬於元素節點的子節點。操做時,均須要取到元素節點再操做子節點;
可使用getElement系列方法,取到元素的節點;
【查看元素節點】
一、getElementById:經過ID取到惟一節點;若是ID重名,只能取到第一個;
getElementsByName() 經過name屬性
getElementsByTagName() 經過標籤名
getElementsByClassName() 經過class名
>>>獲取元素節點時,必定要注意:獲取節點的語句,必須在DOM渲染以後執行。
能夠有兩種方式實現:
①、
將JS代碼寫在<body></body>標籤以後;
②、
將代碼寫到window.onload函數之中;
>>>後面三個getElements,取到的是數組格式,不能直接添加屬性,而應該取出數組的每個單獨操做。
例如:
getElmentsByName("name1")[0].onclick=function;
【查看/設置屬性節點】
一、查看屬性節點:
getAttribute("屬性名");
二、設置屬性節點:
setAttribute("屬性名","新屬性值");
>>> 查看和設置屬性節點,必須先取到元素節點,才能使用。
>>> setAttribute();函數在IE瀏覽器中可能會存在兼容性問題。
好比在IE中不支持使用這個函數設置style/onclick等樣式屬性和事件屬性。
>>> 咱們推薦使
用點符號法替代上述函數:
eg: dom1.style.color="" dom1.onclick="" dom1.src=""
【總結-JS修改DOM節點的樣式】
一、 使用setAttribute()設置class和style屬性,可是存在兼容性問題,不提倡
div.setAttribute("class","cls1");
二、 使用
.className直接設置class類,注意是className而不是.class:
div.className = "cls1";
三、
使用.style設置單個屬性,注意屬性名要是用駝峯命名法:
div.style.backgroundColor = "red";
四、
使用.style 或 .style.cssText 設置多個樣式屬性:
div.style = " color:yellow;"
div.style.cssText = " color:yellow;" √
【查看設置文本節點】
innerText: 取到或設置節點裏面文字內容;
.innerHTML: 取到或設置節點裏面的HTML代碼;
.tagName: 取到當前節點的標籤名。 標籤名所有大寫顯示。
【根據層次獲取節點】
1
.childNodes: 獲取元素的全部子節點。包括回車等文本節點。
.children: 獲取當前元素的全部元素節點(只獲取標籤)。
2 .
firstChild: 獲取元素的第一個子節點。包括回車等文本節點。
.firstElementChild: 獲取元素的第一個子節點。不包括回車等文本節點。
.lastChild: 獲取元素的最後一個子節點。包括回車等文本節點。
.lastElementChild:
3
.parentNode: 獲取當前節點的父節點。
4 .
previousSibling: 獲取當前節點的前一個兄弟節點;包括回車等文本節點。
.previousElementSibling:
5
.nextSibling: 獲取當前節點的後一個兄弟節點;包括回車等文本節點。
.nextElementSibling:
6 .
getAttributes: 獲取當前節點的屬性節點。
【建立並新增節點】
1.
document.createElement("標籤名"):建立節點 。須要配合 setAttribute設置各類新的屬性;
2.
父節點.appendChild(新節點):末尾追加方式插入節點
3
. 父節點.insertBefore(新節點,目標節點):在目標節點前插入新節點.
4.
被克隆節點.cloneNode(true/false):克隆節點
>>> 傳入true: 表示克隆當前節點,以及當前節點的全部字節點;
>>> 傳入false或不傳: 表示只克隆當前節點,而不克隆子節點。
【刪除或替換節點】
1. 父節點.
removeChild(被刪節點): 刪除父節點中的子節點;
2. 父節點
.replaceChild(新節點,老節點): 使用新節點,替換掉老節點。
[表格對象]
一、 rows屬性: 返回表格中的全部行,是一個數組格式;
二、 insertRow(index): 在指定位置插入一行,index從0開始;
三、 deleteRow(index): 刪除指定的一行,index從0開始;
[行對象]
一、 cells屬性: 返回這一行中的全部單元格,是一個數組格式;
二、 rowIndex屬性: 返回這一行是表格中的第幾行,從0開始;
三、 insertCell(index): 在這一行指定位置,插入一個單元格,index從0開始;
四、 deleteCell(index): 刪除這一行的指定單元格,index從0開始
*
[單元格對象]
一、 cellIndex屬性: 返回這個單元格是本行的第幾個,從0開始;
二、 innerText innerHTML align className
PART-8 JS中的事件
【JS中的事件分類】
一、鼠標事件
olick/dblclick/onmouseon/onmouseover.....
二、HTML事件
onload/onscroll/onsubmit/onchange/onfocus....
三、鍵盤事件
keydown:鍵盤按下時觸發
keypress:鍵盤按住時觸發
keyup:鍵盤擡起時觸發
【注意事項】
① 執行順序:keydown → keypress → keyup;
② 當長按住不鬆開時,會循環執行keydown → keypress;
③ 有keydown並不必定有keyup,當事件觸發的過程當中,鼠標將光標移走,將沒有keyup;
④ keypress只能捕獲鍵盤上的數字、字符、符號鍵,不能捕獲各類功能鍵,而keydown和keyup能夠;
⑤
keypress支持區分大小寫,而keydown/keyup並不支持;
【肯定觸發的按鍵】 重點!!!
① 在觸發的函數中傳入一個參數e,表示鍵盤事件;
② 使用
e.keyCode,取到按鍵的Ascii碼值,進而肯定觸發按鍵;
③ 全部瀏覽器的兼容寫法(通常並不須要)
var evn = e ||event;
var code = evn.keyCode||evn.which||evn.charCode;
[判斷組合按鍵的方式]
var isEnt = false,isAlt=false;
document.onkeydown = function (e) {
if (e.keyCode == 13) isEnt = true;
if (e.keyCode == 18) isAlt = true;
if(isEnt = true&&isAlt = true){
alert("您按了回車鍵+Alt鍵")
}
document.onkeyup = function (e) {
if(e.keyCode==13) isEnt=false;
if(e.keyCode==18) isAlt=false;
}
}
附ASCI碼錶:
【JS中的DOM0事件模型】
1
、內聯模型:直接將函數名做爲HTML標籤的某個事件屬性的屬性值;又叫行內綁定;
eg:
<button onclick="func()">DOME0內聯模型</button>
優勢:使用方便;
缺點:違反了W3C關於HTML與JS分離的基本原則;
二、
腳本模型:在JS腳本中,取到某個節點並添加事件屬性;又叫動態綁定;
優勢:實現了W3C關於HTML與JS分離的基本原則;
缺點:
同一個節點只能綁定一個同類型的事件,若是綁定屢次,只有最後一個生效;
eg:
<button id="btn">DOME0腳本模型</button>
window.onload = function () {
var btn = document.getElementById("btn");
btn.onclick = function () {
alert("腳本模型");
}
}
【DOM2事件模型】
一、添加事件綁定方式:
(1)、ie8以前:btn2
.attachEvent("onclick",函數)
(2)、其它瀏覽器:btn2.
addEventListener("click",函數,true/false)
參數三:false(默認)表示事件冒泡;true表示事件捕獲
(3)、兼容寫法:if(btn2.attachEvent){
btn2.attachEvent("onclick",function(){
alert("DOM2事件模型");
});
}else{
btn2.addEventListener("click",function(){
alert("DOM2事件模型");
},false);
}
二、優勢:
① 能夠給同一個節點添加多個同類型事件;
② 提供了可議取消事件綁定的函數;
使用方法舉例以下
三、取消DOM2事件綁定:
注意:要取消DOM2的事件綁定,那麼在綁定事件時,處理函數須要使用有名函數,
不 可以使用匿名函數。
btn2.removeEventListener ("click",func2);
btn2.detachEvent("onclick",func2);
【JS中的事件流】
一、事件冒泡:當某DOM元素觸發某一事件時,會從當前節點開始,逐級往上觸發其祖先節點的同類型事件,直到DOM根節點。
>>>何時會觸發事件冒泡?
① DOM0模型綁定事件,所有都是冒泡;
② IE8以前,使用attachEvent()綁定的事件,所有都是冒泡。
③ 其餘瀏覽器,使用addEventLinstener()添加事件,當第三個參數省點略或者值爲false時,爲事件冒泡;
二、事件捕獲:當某個DOM元素觸發一種事件時,會從文件根節開始,逐級向下逐觸發其祖先節點的同類型事件,直到該節點自身;
>>>什麼狀況下會觸發事件捕獲?
① 使用addEventLinstener()添加事件,當第三個參數值爲true時,爲事件捕獲;
↓ DOM根節點 ↑
↓ ↑
捕 爺爺節點 冒
↓ ↑
獲 父節點 泡
↓ ↑
↓ 當前節點 ↑
三、阻止事件冒泡的方法:
在IE瀏覽器中,使用e.cancelBubble = true;
在其餘瀏覽器,中使用 e.stopPropagation();
兼容全部瀏覽器的寫法:
function myParagraphEventHandler(e) {
e = e || window.event;
if (e.stopPropagation) {
e.stopPropagation(); //IE之外
} else {
e.cancelBubble = true; //IE以前
}
}
四、取消事件默認行爲:
在IE瀏覽器中,使用e.returnValue = false;
在其餘瀏覽器,中使用 e.preventDefault();
兼容全部瀏覽器的寫法:
// 取消事件默認行爲:
function eventHandler(e) {
e = e || window.event;
// 防止默認行爲
if (e.preventDefault) {
e.preventDefault(); //IE之外
} else {
e.returnValue = false; //IE
}
}
【JS中的數組】
一、數組的基本概念:
在內存空間中連續存儲的一組有序數據的集合;
元素在數組中的順序稱爲下標,可使用下標來訪問數組中的每個元素,下標從0開始;
二、如何聲明一個數組?
① 使用字面量聲明: var arrows = [ ];
在JS中的同一數組能夠存儲各類數據類型;使用,逗號隔開;
例如 var arrows = [1,wangqiang,true,null,{},func];
② 使用new關鍵字聲明: var arr = new Array(參數);
>>>參數是能夠:
a.參數省略,表示建立一個空數組;
b.參數爲一個整數,表示聲明一個length爲指定長度的數組。可是這個length能夠隨時可變增長;
c.參數爲逗號分隔的多個數值,表示數組的多個值。
new arry(1,2,3) ==[1,2,3,4]
三、數組中元素的讀寫與增刪
①
讀寫: 經過下標訪問元素 。下標從0開始;
②
增刪 a.使用delete 關鍵字刪除數組的某一個值。
刪除以後,數組的是長度不變,對應的位置變成Undefined;
如 delete arr[1];
b.
arr.pop():刪除數組的最後一個值。至關於arr.length-=1;
c.
arr.shift():刪除數組的第一個值。
d.
arr.unshift(值):在數組的第0個值新增一個值。
e.
arr.push(值):在數組的最後一個位置新增一個值。
f. 直接訪問數組沒達到的下標,能夠動態追加。
arr[100]=1;中間若是有空餘下標將存入Undefined;
四、數組中的其餘方法:
①
join("分隔符號") 將數組用指定分隔符鏈接爲字符串,當參數爲空時,默認用逗號分開;
②
concat():將數組與兩個或者多個數組的值連接爲新數組,【原數組不會改變】。
concat連接時,若是鏈接部分存在二維數組,最多隻能拆開一個[];
eg: [1,2].concat([3,4][5,6])>>>[1,2,3,4,5,6]
[1,2].concat([3,4[5,6]])>>>[1,2,3,4,[5,6]]
③
arr.pop():刪除數組的最後一個值。至關於arr.length-=1;
arr.shift():刪除數組的第一個值。
>>>返回被刪除的值
arr.unshift(值):在數組的第0個值新增一個值。
arr.push(值):在數組的最後一個位置新增一個值。
>>>返回新數組的長度
【上述方法均會改變原來的數組】
④
.reverse() 【原數組被改變】 將數組反轉,倒序輸出; 存在返回值;
⑤
.slice(begin,end) 【原數組不被改變】 截取數組中的某一部分並返回截取的新數組
>>>傳入一個參數,表示是開始的區間,默認將截取到數組末尾;
>>>傳入兩個參數,表示開始和結束的下標,是一個左閉右開區間;
>>>兩個參數能夠爲負數,表示從右邊開始取,最後一個值爲-1;
重要!! ⑥
.sort() 【元素族會改變】將數組進行升序排列;
>>>默認狀況下,會按照每一個元素首字母的ASCII碼值進行排列;
eg: var arr = [4,1,2,3,13];
alert( arr.sort()) ;
>>>[1,13,2,3,4]
>>>可
以傳入一個比較函數,手動指定排序的函數算法;
函數將默認接受兩個值a,b 若是返回值>0,證實a>b;
arr.sort(function(a,b){
return a-b;//升序排列
return b-a;//降序排列
})
⑦
var index = arr.indexOf(value,index) 返回數組中第一個value值所在的下標,若是沒找到將返回-1;
var index = arr.lastIndexOf(value,index) 返回數組中最後一個value值所在的下標,若是沒找到將返回-1;
>>>若是沒有指定的index,則表示全數組查找value;
>>>若是指定了index,則表示從index開始,向後查找value;
⑧
arr.forEach(function(item,index){})
專門用於循環遍歷數組,接受一個回調函數。
回調函數接受兩個參數,第一個參數爲數組的每一項的值,第二個參數爲下標。
(IE8以前不支持這個指令)
⑨
arr.mapfunction(item,index){})
數組映射,使用方式與forEach相同,不一樣的是存在return返回值;
將會建立一個新數組,將原來數組每個值進行新的操做以後一一映射,返回給一個新數組;
(IE8以前不支持這個指令)
五、二維數組與稀疏數組
① 二維數組:數組中的值仍然是一個數組形式;
eg: var arr = [[4,1],[5,4],[3,13]];至關於三行兩列的表格
讀取方法:arr[行號][列號]
② 稀疏數組:數組中的索引是不連續的。(length要比數組中實際的元素個數大)
遍歷二維數組中的每一個元素:
var arr = [[4,1],[5,4],[3,13,0]];
for(var i =0;i<arr.length;i++){
for(var j=0;j<arr[i].length;j++){
console.log(arr[i][j]);
}
}
六、基本數據類型&引用數據類型:
① 基本數據類型:賦值時,是將原變量中的值,賦值給另一個變量。賦值完成後,兩個變量相互獨立。 修改其中一個變量的值,另一個不會改變。
② 引用數據類型:賦值時,是將原變量在內存中的地址,賦值給另一個變量。
賦值完成後兩個變量中存儲的是同一個內存地址,訪問的是同一份數據,
③ 數值型、字符串、布爾類型等變量屬於基本數據類型。
數組,對象屬於引用數據類型
【JS中的內置對象】
Boolean類:
也有兩種聲明方式;
可使用字面量方式聲明一個單純的變量;用typeOf檢測爲Boolean類型;
也可使用new Boolean()聲明一個Boolean類型的對象;用typeOf檢測爲Object類型;
var bool =true;
console.log(bool);
var isTrue = new Boolean(true);
console.log(isTrue);
Number類:
Number.MAX_VALUE 返回Number類可表示的最大值;
Number.Min_VALUE 返回Number類可表示的最小值;
! .toString() 將數值類型轉換成字符串類型;
.toLocaleString()將數值按照本地格式順序轉換成字符串,通常從右開始,三個一組加都好分隔開;
! .toFixed(n);將數字保留n位小數,並將其轉換爲字符串格式;
.toPrecision(n):將數字格式化爲指定長度。n表示不含小數點的位數長度。若是n<原數字長度,則用科學計數法表示。
若是n>原數字長度,則用小數點補足。
.valueOf 返回Number對象的基本數字值;
!!! String類:
也有兩種聲明方式;
可使用字面量方式聲明一個單純的變量;用typeOf檢測爲str類型;
也可使用new Str()聲明一個Boolean類型的對象;用typeOf檢測爲Object類型;
屬性:
str.length 返回字符串的長度,即爲字符數;
字符串支持相似數組的下標訪問方式:str[0];
方法:
str.toLowerCase()將字符串全部的字符轉成小寫;
str.UpLowerCase()將字符串全部的字符轉成大寫;
str.charAt(N)截取數組的第N個字符,至關於str[N]
str.indexOf("srt",index)查找子串在字符串中出現的位置,若是沒有找到返回-1,其餘同數組的indexOf方法;
str.lastIndexOf()同數組。
str.subString (begin,end) 截取數組中的某一部分並返回截取的字符串
>>>傳入一個參數,表示是開始的區間,默認將截取到字符串末尾;
>>>傳入兩個參數,表示開始和結束的下標,是一個左閉右開區間;
str.split(分隔符)將字符串以指定分隔符分隔存入數組中,
【特殊】當傳入"",表示將字符串的每一個字符分開放入數組;
str.replace(old,new)將字符串中的字符進行替換;
第一個參數是字符串時,只替換字符串的第一個old;
第一個參數是正則表達式時,則能夠根據正則的寫法要求,進行替換。
Date日期類:
一、new Date();返回當前最新時間;
new Date("2017,08,29,12:33:29") 返回指定時間;
二、.getFullYear() 獲取4位年份;
.getMonth() 獲取月份0-11月;
.getDate() 獲取一個月中的第幾天 1-31;
.getDay() 獲取一週中的第幾天 0~6 ,0表示周天;
.getHours() 獲取小時
.getMiniutes() 獲取分鐘
.getSeconds() 獲取秒
tip:
一、 將星期寫成數組格式,方便調用
var weeks =["星期天","星期一","星期二","星期三","星期四","星期五","星期六"]
PART-10 JS中正則表達式
1、正則表達式
一、正則表達式包括兩部分:
① 定義正則表達式的規則; ② 正則表達式的模式(i/g/m);
二、聲明正則表達式:
① 字面量聲明:
var reg=/表達式規則/表達式模式;
eg: var reg= /white/g;
② 使用new關鍵字:
var reg=new RegExp("表達式規則","表達式模式");
eg: var reg=new RegExp("white","g");
三、正則表達式的經常使用模式:
① g:全局匹配。不加g默認爲非全局匹配,只匹配第一個符合要求的字符串。
"www".replace(/w/,"#"); -> #ww;
"www".replace(/w/g,"#"); -> ###;
② i:忽略大小寫。不加i,默認要求大小寫不匹配;
"aAa".replace(/A/,"#"); -> a#a;
"aAa".replace(/A/i,"#"); -> #Aa;
"aAa".replace(/A/gi,"#"); -> ###;
③ m:多行匹配模式。不帶m,則一個字符串只有一個開頭,一個結尾;
帶m後,若是字符串分爲多行,則每行都有一個開頭,一個結尾。
`abc `#bc
abc`.replaced(/^a/g,"#") -> abc`
`abc `#bc
abc`.replaced(/^a/gm,"#") -> #bc`
[Tips:如何寫多行字符串]
>>> 普通字符串中,插入\n 表示換行
>>> ES6中,容許使用反引號`包裹字符串,反引號包裹的字符串中,
會保留空格與回車。`abc
abc`
四、正則表達式的經常使用方法:
① test():檢測一個字符串,是否符合正則表達式的驗證,返回true或false;
eg: /white/.test("whiteWhitewhite"); -> true
② exec():檢測一個字符串,是否符合正則表達式的驗證。若是驗證成功,返回結果數
組;若是驗證失敗,返回null;
結果數組中:
index屬性:表示從字符串的第幾個字符,開始符合正則要求;
input屬性:返回完整的被檢索的字符串;
下標第0個:表示符合整個正則表達式的那部分字符;
下標第1個到第n個:表示符合正則的第1個到第n個子表達式的部分。
子表達式,就是正則中的()。也就是,正則中有幾個(), 結果
數組中就有幾個下標。
/12(3)(4)5/.exec("aaa12345");
[
0:12345,
1:3,
2:4,
index:3,
input:"aaa12345",
length:3,
]
PART-11 JS的綜合應用
一 、JSON
什麼是 JSON ?
- JSON 指的是 JavaScript 對象表示法(JavaScript Object Notation)
- JSON 是輕量級的文本數據交換格式
JSON 是存儲和交換文本信息的語法。相似 XML。
JSON 比 XML 更小、更快,更易解析。
- JSON 獨立於語言:JSON 使用 Javascript語法來描述數據對象,可是 JSON 仍然獨立於語言 和平臺。JSON 解析器和 JSON 庫支持許多不一樣的編程語言。 目前很是多的動態(PHP,JSP,.NET)編程語言都支持JSON。
- JSON 具備自我描述性,更易理解
爲何使用 JSON?
對於 AJAX 應用程序來講,JSON 比 XML 更快更易使用:
JSON 語法規則
JSON 語法是 JavaScript 對象表示法語法的子集。
- 數據在名稱/值對中
- 數據由逗號分隔
- 大括號保存對象
- 中括號保存數組
JSON 名稱/值對
JSON 數據的書寫格式是:名稱/值對。
名稱/值對包括字段名稱(在雙引號中),後面寫一個冒號,而後是值:
"name" : "wq"。
JSON 值
JSON 值能夠是:
- 數字(整數或浮點數)
- 字符串(在雙引號中)
- 邏輯值(true 或 false)
- 數組(在中括號中)
- 對象(在大括號中)
- null
JSON 數字
JSON 數字能夠是整型或者浮點型:
{ "age":30 }
JSON 對象
JSON 對象在大括號({})中書寫:
對象能夠包含多個名稱/值對:
{ "name":"菜鳥教程" , "url":"www.runoob.com" }
這一點也容易理解,與這條 JavaScript 語句等價:
name = "菜鳥教程" url = "www.runoob.com"
JSON 數組
JSON 數組在中括號中書寫:
數組可包含多個對象:
{ "sites": [ { "name":"菜鳥教程" , "url":"www.runoob.com" }, { "name":"google" , "url":"www.google.com" }, { "name":"微博" , "url":"www.weibo.com" } ] }
在上面的例子中,對象 "sites" 是包含三個對象的數組。每一個對象表明一條關於某個網站(name、url)的記錄。
JSON 布爾值
JSON 布爾值能夠是 true 或者 false:
{ "flag":true }
JSON null
JSON 能夠設置 null 值:
{ "runoob":null }
JSON.parse()
JSON 一般用於與服務端交換數據。
在接收服務器數據時通常是字符串。
咱們可使用 JSON.parse() 方法將數據轉換爲 JavaScript 對象。
JSON.parse(text[, reviver])
參數說明:
- text:必需, 一個有效的 JSON 字符串。
- reviver: 可選,一個轉換結果的函數, 將爲對象的每一個成員調用此函數。
JSON.stringify()
JSON 一般用於與服務端交換數據。
在向服務器發送數據時通常是字符串。
咱們可使用 JSON.stringify() 方法將 JavaScript 對象轉換爲字符串。
語法
JSON.stringify(value[, replacer[, space]])
參數說明:
必需, 一個有效的 JSON 字符串。
可選。用於轉換結果的函數或數組。
若是 replacer 爲函數,則 JSON.stringify 將調用該函數,並傳入每一個成員的鍵和值。使用返回值而不是原始值。若是此函數返回 undefined,則排除成員。根對象的鍵是一個空字符串:""。
若是 replacer 是一個數組,則僅轉換該數組中具備鍵值的成員。成員的轉換順序與鍵在數組中的順序同樣。當 value 參數也爲數組時,將忽略 replacer 數組。
可選,文本添加縮進、空格和換行符,若是 space 是一個數字,則返回值文本在每一個級別縮進指定數目的空格,若是 space 大於 10,則文本縮進 10 個空格。space 有可使用非數字,如:\t。
注意:
JSON是數據交互中,最經常使用的一種數據格式。
*
* 因爲各類語言的語法都不相同,在傳遞數據時,能夠將本身語言中數組、對象等轉化爲JSON字符串。傳遞以後,能夠將JSON
* 字符串,再解析爲JSON對象;
*
* JSON對象的用戶與JS中的對象基本相同,惟一區別的是:JSON中的鍵必須是字符串;
二 、WEB存儲
HTML5新增web存儲方式,主要有兩種:
客戶端存儲數據的兩個對象爲:
localStorage - 沒有時間限制的數據存儲
sessionStorage - 針對一個 session 的數據存儲
兩個對象在使用方式沒有任何區別,惟一的區別是存儲的數據的有效時間;
①localStorage :除非手動刪除,不然數據將一直保存在本地文件;
②sessionStorage:當瀏覽器關閉時,sessionStorage就被清空;
[Storage的數據存儲]
一、Storage 能夠像普通對象同樣,使用.追加或者讀取最新的數據。
eg:localStorage.username = "zhangsan";
二、經常使用的函數:
保存數據:localStorage.setItem(key,value);
讀取數據:localStorage.getItem(key);
刪除單個數據:localStorage.removeItem(key);
刪除全部數據:localStorage.clear();
獲得某個索引的key:localStorage.key(index);
1、什麼是localStorage、sessionStorage
在HTML5中,新加入了一個localStorage特性,這個特性主要是用來做爲本地存儲來使用的,解決了cookie存儲空間不足的問題(cookie中每條cookie的存儲空間爲4k),localStorage中通常瀏覽器支持的是5M大小,這個在不一樣的瀏覽器中localStorage會有所不一樣。
2、localStorage的優點與侷限
localStorage的優點
一、localStorage拓展了cookie的4K限制
二、localStorage會能夠將第一次請求的數據直接存儲到本地,這個至關於一個5M大小的針對於前端頁面的數據庫,相比於cookie能夠節約帶寬,可是這個倒是隻有在高版本的瀏覽器中才支持的
localStorage的侷限
一、瀏覽器的大小不統一,而且在IE8以上的IE版本才支持localStorage這個屬性
二、目前全部的瀏覽器中都會把localStorage的值類型限定爲string類型,這個在對咱們平常比較常見的JSON對象類型須要一些轉換
三、localStorage在瀏覽器的隱私模式下面是不可讀取的
四、localStorage本質上是對字符串的讀取,若是存儲內容多的話會消耗內存空間,會致使頁面變卡
五、localStorage不能被爬蟲抓取到
localStorage與sessionStorage的惟一一點區別就是localStorage屬於永久性存儲,而sessionStorage屬於當會話結束的時候,sessionStorage中的鍵值對會被清空
這裏咱們以localStorage來分析
3、localStorage的使用
localStorage的寫入,localStorage的寫入有三種方法,這裏就一一介紹一下
if(!window.localStorage){ alert("瀏覽器支持localstorage"); return false; }else{ var storage=window.localStorage; //寫入a字段 storage["a"]=1; //寫入b字段 storage.a=1; //寫入c字段 storage.setItem("c",3); console.log(typeof storage["a"]); console.log(typeof storage["b"]); console.log(typeof storage["c"]); }
運行後的結果以下:
這裏要特別說明一下localStorage的使用也是遵循同源策略的,因此不一樣的網站直接是不能共用相同的localStorage
最後在控制檯上面打印出來的結果是:
不知道各位讀者有沒有注意到,剛剛存儲進去的是int類型,可是打印出來倒是string類型,這個與localStorage自己的特色有關,localStorage只支持string類型的存儲。
localStorage的讀取
if(!window.localStorage){ alert("瀏覽器支持localstorage"); }else{ var storage=window.localStorage; //寫入a字段 storage["a"]=1; //寫入b字段 storage.a=1; //寫入c字段 storage.setItem("c",3); console.log(typeof storage["a"]); console.log(typeof storage["b"]); console.log(typeof storage["c"]); //第一種方法讀取 var a=storage.a; console.log(a); //第二種方法讀取 var b=storage["b"]; console.log(b); //第三種方法讀取 var c=storage.getItem("c"); console.log(c); }
這裏面是三種對localStorage的讀取,其中官方推薦的是getItem\setItem這兩種方法對其進行存取,不要問我這個爲何,由於這個我也不知道
我以前說過localStorage就是至關於一個前端的數據庫的東西,數據庫主要是增刪查改這四個步驟,這裏的讀取和寫入就至關於增、查的這兩個步驟
下面咱們就來講一說
localStorage的刪、改這兩個步驟
改這個步驟比較好理解,思路跟從新更改全局變量的值同樣,這裏咱們就以一個爲例來簡單的說明一下
if(!window.localStorage){ alert("瀏覽器支持localstorage"); }else{ var storage=window.localStorage; //寫入a字段 storage["a"]=1; //寫入b字段 storage.b=1; //寫入c字段 storage.setItem("c",3); console.log(storage.a); // console.log(typeof storage["a"]); // console.log(typeof storage["b"]); // console.log(typeof storage["c"]); /*分割線*/ storage.a=4; console.log(storage.a); }
這個在控制檯上面咱們就能夠看到已經a鍵已經被更改成4了
localStorage的刪除
一、將localStorage的全部內容清除
var storage=window.localStorage; storage.a=1; storage.setItem("c",3); console.log(storage); storage.clear(); console.log(storage);
二、 將localStorage中的某個鍵值對刪除
var storage=window.localStorage; storage.a=1; storage.setItem("c",3); console.log(storage); storage.removeItem("a"); console.log(storage.a);
控制檯查看結果
localStorage的鍵獲取
var storage=window.localStorage; storage.a=1; storage.setItem("c",3); for(var i=0;i<storage.length;i++){ var key=storage.key(i); console.log(key); }
使用key()方法,向其中出入索引便可獲取對應的鍵
4、localStorage其餘注意事項
通常咱們會將JSON存入localStorage中,可是在localStorage會自動將localStorage轉換成爲字符串形式
這個時候咱們可使用JSON.stringify()這個方法,來將JSON轉換成爲JSON字符串
示例:
if(!window.localStorage){ alert("瀏覽器支持localstorage"); }else{ var storage=window.localStorage; var data={ name:'xiecanyong', sex:'man', hobby:'program' }; var d=JSON.stringify(data); storage.setItem("data",d); console.log(storage.data); }
讀取以後要將JSON字符串轉換成爲JSON對象,使用JSON.parse()方法
var storage=window.localStorage; var data={ name:'xiecanyong', sex:'man', hobby:'program' }; var d=JSON.stringify(data); storage.setItem("data",d); //將JSON字符串轉換成爲JSON對象輸出 var json=storage.getItem("data"); var jsonObj=JSON.parse(json); console.log(typeof jsonObj);
打印出來是Object對象
另外還有一點要注意的是,其餘類型讀取出來也要進行轉換
3、iframe
iframe是什麼
iframe就是咱們經常使用的iframe標籤:<iframe>。iframe標籤是框架的一種形式,也比較經常使用到,iframe通常用來包含別的頁面,例如咱們能夠在咱們本身的網站頁面加載別人網站或者本站其餘頁面的內容。iframe標籤的最大做用就是讓頁面變得美觀。iframe標籤的用法有不少,主要區別在於對iframe標籤訂義的形式不一樣,例如定義iframe的長寬高。
iframe用法詳解
首先須要瞭解iframe標籤的寫法,和大多HTML標籤寫法相同,iframe標籤輸入形式爲:<iframe>和</iframe>。以<iframe>開頭,以</iframe>結尾,將須要的文本內容添加到兩個標籤之間便可。iframe標籤內的內容能夠作爲瀏覽器不支持iframe標籤時顯示。
高度充滿父容器的方式:
① 給div設置100%的同時,要使用絕對定位;
② 使用單位100vh,能夠設置高度充滿父容器;
使用單位100vw,能夠設置寬度充滿父容器;