日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

JS基础--函数与BOM、DOM操作、JS中的事件以及内置对象

發(fā)布時間:2023/12/20 javascript 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 JS基础--函数与BOM、DOM操作、JS中的事件以及内置对象 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

? ?前 ? 言

絮叨絮叨

? ? ? ? ?這里是JS基礎(chǔ)知識集中講解的第三篇,也是最后一篇,三篇JS的基礎(chǔ),大多是知識的羅列,并沒有涉及更難得東西,干貨滿滿!看完這一篇后,相信許多正在像我一樣正處于初級階段的同學(xué),經(jīng)過初步的學(xué)習(xí),會對這一門語言有了一定深入的了解,也會感受到這一門語言的強(qiáng)大之處。希望各位同學(xué)通過一定的學(xué)習(xí),會得到等大的收獲。

? ? ? ? 因為是最后一篇所以內(nèi)容可能有點多,希望各位同學(xué)能夠慢慢看,細(xì)細(xì)看,讓我們一起學(xué)習(xí),一起進(jìn)步,一起感受JS的魅力。

?

?

函數(shù)

?

?

函數(shù)的聲明及調(diào)用

?

1、函數(shù)的聲明格式
?function 函數(shù)名(參數(shù)1,參數(shù)2,……){
  //函數(shù)體代碼
  ?return 返回值;
?}

?函數(shù)的調(diào)用
①直接調(diào)用:函數(shù)名(參數(shù)1的值,參數(shù)2的值,……);


②事件調(diào)用:在Html標(biāo)簽中,使用事件名="函數(shù)名()"

<button onclick="saySth('hahaha','yellow')">點擊按鈕,打印內(nèi)容</button>

2、函數(shù)的注意事項:
①函數(shù)名必須要符合小駝峰法則!(首字母小寫,之后的每個單詞首字母大寫)


②函數(shù)名后面的()中可以有參數(shù),也可以沒有參數(shù),分別稱為有參函數(shù)和無參函數(shù);


③聲明函數(shù)時的參數(shù)列表,稱為形參列表,形式參數(shù)。(變量的名字)
  調(diào)用函數(shù)時的參數(shù)列表,稱為實參列表,實際參數(shù)。(變量的賦值)

?

function saySth(str,color){document.write("<div style='color:"+color+";'>"+str+"</div>");} saySth("我真帥!","red");

④函數(shù)的形參列表個數(shù)與實參列表個數(shù)沒有實際關(guān)聯(lián)關(guān)系。
  函數(shù)參數(shù)的個數(shù),取決于實參列表。
  如果實參列表的個數(shù)<形參列表,則未賦值的形參,將為undefined。


⑤函數(shù)可以有返回值,使用return返回結(jié)果(因為return有結(jié)束函數(shù)的作用,所以代碼不能寫到return后面):
  調(diào)用函數(shù)時,可以使用一個變量接受函數(shù)的返回結(jié)果。如果函數(shù)沒有返回值,則接受的結(jié)果為undefined;

function func(){
  return "haha";
}

var num = func();

⑥函數(shù)中變量的作用域(JS中只有函數(shù)有自己的作用域):
  在函數(shù)中,使用var聲明的變量,為局部變量,只能在函數(shù)內(nèi)部訪問;
  不用var聲明的變量,為全局變量,在函數(shù)外面也能訪問;
  函數(shù)的形參列表,默認(rèn)為函數(shù)的局部變量,只能在函數(shù)內(nèi)部使用。

⑦函數(shù)的聲明與函數(shù)的調(diào)用沒有先后之分。即,可以在聲明函數(shù)前,調(diào)用函數(shù)。

func();         //聲明func之前調(diào)用也是可以的。 function func(){}

?

?

匿名函數(shù)的聲明使用

?

1、聲明一個匿名函數(shù),直接賦值給某一個事件

window.onload = function(){}

?


2、使用匿名函數(shù)表達(dá)式。將匿名函數(shù)賦值給一個變量。

var func = function(){} //聲明 func(); //調(diào)用

?注意:使用匿名函數(shù)表達(dá)式時,函數(shù)的調(diào)用語句,必須放在函數(shù)聲明語句之后!!!(與普通函數(shù)的區(qū)別)

3、自執(zhí)行函數(shù)
① !function(){}(); //可以使用多種運(yùn)算符開頭,但一般用感嘆號!
 ?!function(形參列表){}(實參列表);


② (function(){}()); //使用()將函數(shù)機(jī)函數(shù)后的括號包裹


③ (function(){})(); //使用()值包裹函數(shù)部分;

三種寫法的特點
① 使用!開頭,結(jié)構(gòu)清晰,不容易混亂,個人推薦使用;


② 能夠表明匿名函數(shù)與調(diào)用的()為一個整體,官方推薦使用;


③ 無法表明函數(shù)與之后的()的整體性,不推薦使用。

?

?

函數(shù)的內(nèi)部屬性

?

Arguments對象
①作用:用于儲存調(diào)用函數(shù)時的所有實參,當(dāng)我們調(diào)用函數(shù)并用實參賦值時,實際上參數(shù)列表已經(jīng)保存到Arguments數(shù)組中,
  可以在函數(shù)中,使用Arguments[n]的形式調(diào)用。n從0開始


②arguments數(shù)組的個數(shù),取決于實參;列表,與形參無關(guān)。
  但是,一旦第N個位置的形參、實參、argument都存在時,形參將與arguments綁定,同步變化。
  (即,在函數(shù)中修改形參的值,arguments也會改變。反之亦成立)


③arguments.callee 是arguments的重要屬性。表示arguments所在函數(shù)的引用地址;
  在函數(shù)里面,可以引用arguments.callee()調(diào)用函數(shù)本身。
  在函數(shù)內(nèi)部,調(diào)用函數(shù)自身的寫法,叫做遞歸。


遞歸分為兩部分: 遞和歸。以遞歸調(diào)用語句為界限,可以將函數(shù)分為上下兩部分。
遞:當(dāng)函數(shù)執(zhí)行上半部分遇到自身的調(diào)用語句時,繼續(xù)進(jìn)入內(nèi)層函數(shù),再執(zhí)行上半部分。直到執(zhí)行完最內(nèi)層函數(shù)。
歸:當(dāng)最內(nèi)層函數(shù)執(zhí)行完以后,再從最內(nèi)層函數(shù)開始,逐漸執(zhí)行函數(shù)的下半部分。

當(dāng)最外層函數(shù)執(zhí)行時,遇到自身的調(diào)用語句會進(jìn)入內(nèi)層函數(shù)執(zhí)行,而外層函數(shù)的后半那部分暫不執(zhí)行,直到最內(nèi)層函數(shù)執(zhí)行完以后,在逐步向外執(zhí)行。

?

如圖:

var num = 1; function func(){console.log(num);num++;

    if(num<=4){
      arguments.callee(); //遞歸調(diào)用語句 ↑上部分 遞 ↓下部分 歸
    }

    num--;
    console.log(num);
}
func();

?

?

JS代碼的執(zhí)行順序問題

?

?

JS代碼在運(yùn)行時,會分為兩大部分。檢查裝載 執(zhí)行階段。
檢查裝載階段:會先檢測代碼的語法錯誤,進(jìn)行變量、函數(shù)的聲明。
執(zhí)行階段:變量的賦值、函數(shù)的調(diào)用等,都屬于執(zhí)行階段。

?

以下面的三段代碼為例:

1、打印num,顯示為Undefined,而不會是10。

console.log(num); //Undefined var num = 10;

2、函數(shù)可以正常執(zhí)行。

func1(); //函數(shù)可以正常執(zhí)行 function func1(){}

?

3、函數(shù)不能執(zhí)行,打印func2時,顯示Undefined

func2(); //函數(shù)不能執(zhí)行,打印func2時,顯示Undefined var func2 = function(){}

?原因:上述代碼的執(zhí)行順序為:

---------------檢查裝載階段----------------
      ?var num;
    ??function func1(){}
      ?var func2;

?---------------代碼執(zhí)行階段----------------
    console.log(num);
?     ?num = 10;
      ??func1();
      ??func2();
   ?func2 = function(){}

?

?

?

?

BOM

屏幕對象

console.log(window.screen.width); //屏幕寬度
console.log(window.screen.height); //屏幕高度
console.log(window.screen.availwidth); //可用寬度
console.log(window.screen.availheight); //可用高度=屏幕高度-底部工具欄




location 對象:渠道瀏覽器的URL地址信息
完整的URL路徑:
  協(xié)議名://主機(jī)名(IP地址):端口號/文件所在路徑?傳遞參數(shù)(name1=value1&name2=value2)#錨點
例如:http//127.0.01:8080/wenjianjia/index.html?name=jredu#top

?console.log(location);

console.log(location.href); //返回當(dāng)前完整路徑
console.log(location.protocol); //返回協(xié)議名
console.log(location.host); //返回主機(jī)名+端口號
console.log(location.hostname); //返回主機(jī)名
console.log(location.port); //返回端口號
console.log(location.pathname); //返回文件路徑
console.log(location.search); //返回?開頭的參數(shù)列表
console.log(location.hash); //返回#開頭的錨點



?

使用JS跳轉(zhuǎn)頁面
window.location = "www.baidu.com";

其他使用location提供的方法跳轉(zhuǎn)頁面的方式

location.assign("www.baidu.com");
location.reliace("www.baidu.com");

function assign(){
  //加載新的文檔,加載以后可以回退
  location.assign("http://www.baidu.com");
}


?


function replace(){
  //使用新文檔替換當(dāng)前文檔,替換以后不能回退
  location.replace("http://www.baidu.com");
}



function reload(){
  //重新加載當(dāng)前文檔。刷新頁面
  //reload():在本地刷新當(dāng)前頁面,相當(dāng)于F5
  //reload():強(qiáng)制刷新,從服務(wù)器端重新加載頁面,相當(dāng)于ctrl+F5
  location.reload();
}


?

?

history 瀏覽歷史

console.log(hostory);
console.log(hostory.length); //瀏覽歷史列表的個數(shù)

function back(){
  history.back(); //后退按鈕
}



function forward(){
  history.forward(); //前進(jìn)按鈕
}



function go(){
  /*跳轉(zhuǎn)到瀏覽歷史的任意一個頁面:0表示當(dāng)前頁面,-1表示后一頁(back),1表示前一頁(forward)*/
  history.go(1);
}


?

?

navigator ?(了解即可)
包含瀏覽器的各種系統(tǒng)信息。

console.log(navigator);

/*檢測瀏覽器安裝的各種插件*/
console.log(navigator.plugins);


?

?

confirm 確認(rèn)對話框

var is = confirm("我?guī)泦?#34;);if(is){alert("你最帥!"); }else{alert("帥上天!"); }

效果如圖:

?

?

?

window對象的常用方法

>>>在window對象中的所有方法和屬性,均可以省略window關(guān)鍵字
  window.alert();-->alert();

1、alert():彈出一個警告提示框;


2、prompt():彈窗接受用戶的輸入;


3、confirm():彈出一個帶有“確定”和“取消”按鈕的對話框,點擊按鈕返回true/flase;


4、close():關(guān)閉當(dāng)前瀏覽器窗口,在個別瀏覽器中,只能關(guān)閉在當(dāng)前腳本新打開的頁面(使用超鏈接、window.open()等方式打開的頁面)


5、open():打開一個新窗口。
  參數(shù)一:新窗口的地址
  參數(shù)二:新窗口的名字,并沒有什么卵用
  參數(shù)三:新窗口的各種屬性設(shè)置,"屬性1=值1,屬性2=值2,屬性3=值3"


6、setTimeout:設(shè)置延時執(zhí)行,只會執(zhí)行一次;
  setInterval:設(shè)置定時器,每隔n毫秒執(zhí)行一次
接受兩個參數(shù):需要執(zhí)行的function、毫秒數(shù);

7、clearTimeout:清除延時器
setInterval:設(shè)置定時器,每隔n毫秒執(zhí)行一次
使用方法:設(shè)置延時器或定時器時,可以使用變量接受定時器id;
var id = setInterval;
調(diào)用clearInterval時,將id傳入,即可清除對應(yīng)的定時器;
clearInterval(id);

function closewindow(){close(); } function openwindow(){window.open("http://www.baidu.com","baidu","width=600px,height=600px,left=200px,top=200px"); }var timeoutId = 0; function setTimeout1(){setTimeout(function(){console.log("延時器成功執(zhí)行!");},3000);timeoutId = setTimeout(openwindow,3000); } function clearTimeout1(){clearTimeout(); }

?

?效果如圖,當(dāng)點擊 設(shè)置延時器按鈕 ?時,會隔3秒彈出一個新窗口:

?

?

?

DOM

?

?

DOM樹節(jié)點

?

?

DOM節(jié)點分為三大類:元素節(jié)點、屬性節(jié)點、文本節(jié)點;

文本節(jié)點、屬性節(jié)點屬于元素節(jié)點的子節(jié)點。操作時,均需要先取到元素節(jié)點,在操作子節(jié)點;

可以使用getElement系列方法,取到元素節(jié)點。

【查看元素節(jié)點】
1、 getElementById:通過id取到唯一節(jié)點。如果id重名,只能取得第一個。
  getElementsByName():通過name屬性
  getElementsByTagName():通過標(biāo)簽名
  getElementsByClassName():通過class名

>>>獲取元素節(jié)點時,一定要注意:獲取節(jié)點的語句,必須在DOM渲染完成之后執(zhí)行??梢杂袃煞N方式實現(xiàn):
 ?、賹S代碼寫在body之后;
  ②將代碼寫到window.onload函數(shù)之中;
>>>后面三個getElements,取到的是數(shù)組格式,不能直接添加各種屬性,而應(yīng)該去除數(shù)組的每一個單獨(dú)操作。
例如:getElementsByTagName("name1")[0].onclick = function

【查看/設(shè)置屬性節(jié)點】
1、查看屬性節(jié)點:getAttribute("屬性名");
2、設(shè)置屬性節(jié)點:setAttribute("屬性名","新屬性值");

>>>查看和設(shè)置屬性節(jié)點,必須先去到元素節(jié)點,才能使用。
>>>setAttribute(); 函數(shù)在IE瀏覽器中可能會存在兼容性問題。比如在IE中不支持使用這個函數(shù)設(shè)置style/onclick等樣式屬性和事件屬性。
>>>我們推薦使用點符號法替代上述函數(shù)
  eg:dom1.style.color="" dom1.οnclick="" dom1.src=""
*
【總結(jié)-JS修改DOM節(jié)點的樣式】
1、使用setAttribute()設(shè)置class和style屬性,但是存在兼容性問題,不提倡
  eg:div.setAttribute("class","cls1");
2、使用.className直接設(shè)置class類,注意是className而不是.class
  eg:div.className = "cls1";
3、使用.style設(shè)置單個屬性,注意屬性名要使用駝峰命名法:
  eg:div.style.backgroundColor = "red";
4、使用.style或.style.cssText 設(shè)置多個樣式屬性
  eg:div.style = "background-color: red; color: yellow;"
  eg:div.style.cssText = "background-color: red; color: yellow;"? ? 推薦使用√

【查看/設(shè)置文本節(jié)點】
innerText:取到或設(shè)置節(jié)點里面的文字內(nèi)容;
innerHTML:取到或設(shè)置節(jié)點里面的HTML代碼;
tagName:取到當(dāng)前節(jié)點的標(biāo)簽名。標(biāo)簽名全部大寫顯示。

?

【根據(jù)層次獲取節(jié)點】
1、 .childNodes:獲取元素的所有子節(jié)點。包括回車等文本節(jié)點。
  .children:獲取當(dāng)前元素的所有元素節(jié)點(只獲取標(biāo)簽)。


2、 .firstChild:獲取元素的第一個子節(jié)點。包括回車等文本節(jié)點。
  .firstElementChild:獲取元素的第一個子節(jié)點。不包括回車等文本節(jié)點
?  ??.lastChild:獲取元素的最后一個子節(jié)點。包括回車等文本節(jié)點。
  .lastElementChild:獲取元素的最后一個子節(jié)點。不包括回車等文本節(jié)點。


3、 .parentNode:獲取當(dāng)前節(jié)點的父節(jié)點。


4、 .previousSibling:獲取當(dāng)前節(jié)點的前一個兄弟節(jié)點,包括回車等文本節(jié)點。
  .previousElementSibling:獲取當(dāng)前節(jié)點的前一個兄弟節(jié)點,不包括回車等文本節(jié)點。


5、 .nextSibling:獲取當(dāng)前節(jié)點的后一個兄弟節(jié)點,包括回車等文本節(jié)點。
  .nextElementSibling:獲取當(dāng)前節(jié)點的后一個兄弟節(jié)點,不包括回車等文本節(jié)點


6、 .getAttribute:獲取當(dāng)前節(jié)點的屬性節(jié)點

?

【創(chuàng)建并新增節(jié)點】
1、document.creatElement("標(biāo)簽名"):創(chuàng)建節(jié)點。需要配合setAttribute設(shè)置各種新的屬性;
2、父節(jié)點.appendChild(新節(jié)點):末尾追加方式插入節(jié)點
3、父節(jié)點.insertBefore(新節(jié)點,目標(biāo)節(jié)點):在目標(biāo)節(jié)點前插入新節(jié)點
4、被克隆節(jié)點.cloneNode(true/false):克隆節(jié)點
?>>>傳入true:表示克隆當(dāng)前節(jié)點,以及當(dāng)前節(jié)點的所有子節(jié)點
>>>傳入false或不傳:表示只克隆當(dāng)前標(biāo)簽節(jié)點,而不克隆子節(jié)點

【刪除或替換節(jié)點】
1、父節(jié)點.removeChild(被刪除節(jié)點):刪除父節(jié)點中的子節(jié)點;
2、父節(jié)點.replaceChild(新節(jié)點,老節(jié)點):使用新節(jié)點,替換掉老節(jié)點。

?

?

?

事件

?

?

JS中的事件分類

?

1、鼠標(biāo)事件
click、bdlclick、onmouseover、onmouseout


2、HTML事件
onload、onscroll、onsubmit、onchange、onfouce


3、鍵盤事件
keydown:鍵盤按下時觸發(fā)
keypress:鍵盤按下并松開的瞬間觸發(fā)
keyup:鍵盤抬起時觸發(fā)

[注意事項]
① 執(zhí)行順序:keydown->keypress->keyup
② 當(dāng)長按時,會循環(huán)執(zhí)行keydown->keypress
③ 有keydown并不一定有keyup,當(dāng)事件觸發(fā)過程中,鼠標(biāo)將光標(biāo)移走,將導(dǎo)致沒有keyup
④ keypress只能捕獲鍵盤上的數(shù)字、字母、符號鍵,不能捕捉各種功能鍵,而keydown和keyup可以。
⑤ keypress支持區(qū)分大小寫,keydown和keyup并不支持。

[確定觸發(fā)的按鍵]
① 再觸發(fā)的函數(shù)中,傳入一個參數(shù)e,表示鍵盤事件;
② 使用e.keyCode,取到按鍵的Asscii碼值,進(jìn)而確定觸發(fā)按鍵
③ 所有瀏覽器的兼容寫法(一般并不需要)
var evn = e || event;
var code = evn.keyCode || evn.witch || evn.charCode;

?

?

JS中的DOM0事件模型

?

?

1、內(nèi)斂模型(行內(nèi)綁定):直接將函數(shù)名作為HTML標(biāo)簽的某個事件屬性的屬性值
  eg:<button οnclick="func()">DOM0內(nèi)聯(lián)模型</button>
  優(yōu)點:使用方便。
  缺點:違反了w3c關(guān)于HTML與javaScript分離的基本原則;
2、腳本模型(動態(tài)綁定):在JS腳本中,取到某個節(jié)點,并添加事件屬性
  eg:window.onload = function(){}
  優(yōu)點:實現(xiàn)了HTML與JavaScript的分離。
  缺點:同一個節(jié)點只能綁定一個同類事件。如果綁定多次,最后一個生效。
  

?

JS中的DOM2事件模型

?


1、添加事件綁定方式
  ①IE8之前:btn2.attachEvent("onclick",函數(shù));
 ?、谄渌麨g覽器:btn2.addEventListener("click",函數(shù),true/false);
括號里面的參數(shù):
  參數(shù)一:綁定的事件名稱
  參數(shù)二:方法函數(shù)
  參數(shù)三:false(默認(rèn))表示事件冒泡 true 表示事件捕獲
  
 ?、奂嫒輰懛?#xff1a;

if(btn2.attachEvent){btn2.attachEvent(); }else{btn2.addEventlistener(); }

?


2、優(yōu)點

   ①可以給同一節(jié)點添加多個同類型事件;
 ?、谔峁┝丝梢匀∠录壎ǖ暮瘮?shù)。


3、取消DOM2事件綁定
注意:如果要取消DOM2的事件綁定,那么在綁定事件時,處理函數(shù)必須要使用有名函數(shù),而不能使用匿名函數(shù)。
btn2.removeEventListener("click",func2);
btn2.detachEvent("click",func2);

?

?

事件冒泡與事件捕獲

?

?

【JS中的事件流】
1、事件冒泡:當(dāng)某DOM元素觸發(fā)一種事件時,會從當(dāng)前節(jié)點開始,主機(jī)往上觸發(fā)其祖先節(jié)點的同類型事件,直到DOM根節(jié)點
  >>>什么情況下會產(chǎn)生事件冒泡?
  ①DOM0模型綁定事件,全部都是冒泡;
 ?、贗E8之前,使用的attachEvent()綁定的事件,全部都是冒泡
  ?③其他瀏覽器,使用addEventlistner()添加事件,當(dāng)?shù)谌齻€參數(shù)省略或者為false時,為事件冒泡;


2、事件捕獲:當(dāng)某DOM元素觸發(fā)一種事件時,會從文檔根節(jié)點開始,主機(jī)向下觸發(fā)其祖先節(jié)點的同類型事件,直到該節(jié)點自身;
?  >>>什么情況下會產(chǎn)生事件捕獲?
  ①使用addEventlistner()添加事件,當(dāng)?shù)谌齻€參數(shù)為true時,為事件捕獲;
  


3、阻止事件冒泡
在IE瀏覽器中,使用:e.cancelBubble = true;
在其他瀏覽器中,使用:e.stopPropagation();

兼容所有瀏覽器的寫法:

function myParagraphEventHandler(e) {e = e || window.event;if (e.stopPropagation) {e.stopPropagation(); //IE以外 } else {e.cancelBubble = true; //IE } }


4、取消事件默認(rèn)行為
在IE瀏覽器中,使用:e.returnValue = false;
在其他瀏覽器中,使用:e.preventDefault();

兼容所有瀏覽器的寫法:

function eventHandler(e) {e = e || window.event;// 防止默認(rèn)行為 if (e.preventDefault) {e.preventDefault(); //IE以外 } else {e.returnValue = false; //IE } }

?

?

?

JS中的內(nèi)置對象

?

?

數(shù)組

?

?

1、數(shù)組的基本概念?
數(shù)組是在內(nèi)存空間中連續(xù)存儲的一組有序數(shù)據(jù)的集合。
元素在數(shù)組中的順序,稱為下標(biāo)??梢允褂孟聵?biāo)訪問數(shù)組的每個元素。

2、如何聲明一個數(shù)組?
 ?、偈褂米置媪柯暶? var arr = [];

  在JS中,同一數(shù)組可以存儲各種數(shù)據(jù)類型。
  例如: var arr = [1,"wuhao",true,{},null,func]

  ②使用new關(guān)鍵字聲明:var arr = new Array(參數(shù));
  >>>參數(shù)可以是:
  a.參數(shù)省略,表示創(chuàng)建一個空數(shù)組;
  b.參數(shù)為一個整數(shù),表示聲明一個length為指定長度的數(shù)組。但是這個length可以隨時可變可追加。
  c.參數(shù)為逗號分隔的多個數(shù)值,表示數(shù)組的多個值。
  new array(1,2,3) == [1,2,3]

var arr = [1,"wuhao",true,{},null,func]; console.log(arr);

?




3、數(shù)組中元素的讀寫/增刪?
 ?、僮x寫:通過下標(biāo)訪問元素。下標(biāo)從0開始 arr[1] = "haha";
 ?、谠鰟h:
    a.使用delete關(guān)鍵字,刪除數(shù)組的某一個值。刪除后,數(shù)組的長度不變,對應(yīng)的位置變?yōu)閁ndefined。
      eg:delete arr[1];
    b.arr.pop():刪除數(shù)組的最后一個值。相當(dāng)于arr.length -= 1;
    c.arr.shift():刪除數(shù)組的第一個值。
    d.arr.unshift(值):在數(shù)組的第0個位置新增一個值;
    e.arr.push(值):在數(shù)組的最后一個位置新增一個值;
    f.直接訪問數(shù)組沒達(dá)到的下標(biāo),可以動態(tài)追加。
      eg:arr[8]="嘿嘿"; arr[100]=1; ? ? ?中間如果有空余下標(biāo),將存入Undefined

4、數(shù)組中的其他方法

 ?、賘oin():將數(shù)組用指定分隔符鏈接為字符串。當(dāng)參數(shù)為空時,默認(rèn)用逗號分隔。

var arr = [1,2,3,4,5,6,7,8]; var str = arr.join("-"); console.log(str)

效果:

?


 ?、赾oncat():[原數(shù)組不會被改變] 將數(shù)組,與兩個或多個數(shù)組的值鏈接為一個新數(shù)組。
   ??concat連接時,如果有二維數(shù)組,則至多能拆一層[]
    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]]

?

var arr = [1,2,3,4,5,6,7,8]; var arr1 = ["haha","heihei","hehe"]; var arr2 = arr.concat(arr1); var arr3 = arr.concat([1,2,[3,4]]);console.log(arr3);

?

?

效果:

?

?


  ③push():在數(shù)組最后增加一個,unshift():數(shù)組開頭增加一個。 -->返回新數(shù)組的長度;
   pop():在數(shù)組最后刪除一個,shift():數(shù)組開頭刪除一個。 -->返回被刪除的值;
?   [上述方法,均會改變原數(shù)組]

var arr = [1,2,3,4,5,6]; arr.pop(6); arr.push(7);console.log(arr);

?

效果:

?



 ?、躵everse():[原數(shù)組被改變]將數(shù)組翻轉(zhuǎn),倒敘輸出。
    ?

var arr = [1,2,3,4,5,6,7,8]; arr.reverse(); console.log(arr);

?

?


  ⑤slice(begin,end):[原數(shù)組不會被改變]截取數(shù)組中的某一部分,并返回截取的新數(shù)組。

  >>>傳入一個參數(shù),表示開始區(qū)間,默認(rèn)將截到數(shù)組最后;
  >>>傳入兩個參數(shù),表示開始和結(jié)束的下標(biāo),左閉右開區(qū)間(包含begin,不包含end);
  >>>兩個參數(shù)可以為負(fù)數(shù),表示從右邊開始數(shù),最后一個值為-1;

var arr = [1,2,3,4,5,6,7,8]; var arr1 = arr.slice(3,7); console.log(arr1);

?


 ?、辳ort():[原數(shù)組被改變]將數(shù)組進(jìn)行升序排列;
  >>>默認(rèn)情況下,會按照每個元素首字母的ASCII值進(jìn)行排序;
    eg:[1,5,13,12,7,6,4,8].sort() -->[1,12,13,4,5,6,7,8];
  >>>可以傳入一個比較函數(shù),手動指定排序的函數(shù)算法;
  函數(shù)將默認(rèn)接收兩個值a,b,如果函數(shù)返回值>0,則證明a>b,如果函數(shù)返回值<0,則證明a<b
  arr.sort(function(a,b){
    return a-b; //升序排列;
    return b-a; //降序排列;
  });

?


 ?、遡ndexOf(value,index):返回數(shù)組中第一個value值所在的下標(biāo),如果沒有找到則返回-1;
   ??lastIndexOf(value,index):返回數(shù)組中最后一個value值所在的下標(biāo),如果沒有找到則返回-1;
    >>>如果沒有指定index,則表示全數(shù)組查找value;
    >>>如果指定了index,則表示從index開始,向后查找value;

?

例:返回的是7

var arr = [1,5,6,3,4,2,7,6,4,8]; var index = arr.indexOf(6,4); console.log(index);

?



  ⑧forEach():專門用于循環(huán)遍歷數(shù)組。接收一個回調(diào)函數(shù),回調(diào)函數(shù)接收兩個參數(shù),第一個參數(shù)為數(shù)組的每一項的值,第二個參數(shù)為下標(biāo)
  (IE8之前,不支持此函數(shù)!!!!!)

var arr = [1,5,6,3,4,2,7,6,4,8]; arr.forEach(function(item,index){console.log(item); })

?

?


 ?、醡ap():數(shù)組映射,使用方式與forEach()相同。不同的是,map可以有return返回值,表示將原數(shù)組的每個值進(jìn)行操作后,返回給一個新數(shù)組。
  (IE8之前,不支持此函數(shù)!!!!!)

var arr1 = arr.map(function(item,index){console.log(item);return item+2; });
console.log(arr1);

?



5、二維數(shù)組與稀疏數(shù)組(了解)
 ?、俣S數(shù)組:數(shù)組中的值,依然是一個數(shù)組形式。
    eg:arr=[[1,2,3],[4,5,6]]; //相當(dāng)于兩行三列
    讀取二維數(shù)組:arr[行號][列號];

?

var arr2 = [[1,2],[3,4,5],[6,7]]; for(var i=0;i<arr2.length;i++){for(var j=0;j<arr2[i].length;j++){console.log(arr2[i][j]);} }

?

?

?

?

 ?、谙∈钄?shù)組:數(shù)組中的索引是不連續(xù)的。(length要比數(shù)組中實際的元素個數(shù)大)

6、基本數(shù)據(jù)類型和引用數(shù)據(jù)類型:
 ?、倩緮?shù)據(jù)類型:賦值時,是將原變量中的值,賦值給另一個變量,復(fù)制完成后,兩個變量相互獨(dú)立,修改其中一個的值,另一個不會變化。
 ?、谝脭?shù)據(jù)類型:賦值時,是將原變量在內(nèi)存中的地址,賦值給另一個變量。賦值完成后,兩個變量中存儲的是同一個內(nèi)存地址,訪問的是同一份數(shù)據(jù),
    其中一個改變另一個也會發(fā)生變化。
  ③ 數(shù)值型、字符串、布爾型等變量屬于基本數(shù)據(jù)類型;
    數(shù)組,對象屬于引用數(shù)據(jù)類型;

?

?

內(nèi)置對象

?

1、Boolean 類
  有兩種聲明方式:
  可以使用字面量方式聲明一個單純的變量;用typeOf檢測為Boolean類型
  也可以使用new Boolean()聲明一個Boolean類型的對象。用typeOf檢測為Object類型

?

2、Number類
Number.MAX_VALUE 返回Number類最大值
?Number.MIN_VALUE 返回Number類最小值

?.toString() 將數(shù)值類型轉(zhuǎn)換為字符串類型
?.toLocaleString() 將數(shù)值按照本地格式順序轉(zhuǎn)換為字符串,一般從右開始,三個一組加逗號分隔;
.toFixed(n) 將數(shù)字保留n位小數(shù),并轉(zhuǎn)為字符串格式;
.toPrecision(n) 將數(shù)字格式化為指定長度。n表示不含小數(shù)點的位數(shù)長度,如果n小于原數(shù)字長度,則用科學(xué)計數(shù)法表示。如果n大于原數(shù)字長度,則小數(shù)點后補(bǔ)0
.valueOf() 返回Number對象的基本數(shù)字值;

?

3、String 類

?、?、屬性:str.length 返回字符串的長度,也就是 字符數(shù)
  字符串支持類似數(shù)組的下標(biāo)訪問方式:str[0];
?、?、 方法:
  .toLowerCase():將字符串所有字符轉(zhuǎn)成小寫
  .toUpperCase():將字符串所有字符轉(zhuǎn)成大寫
  .charAt(n):截取數(shù)組的第n個字符,相當(dāng)于str[n]
  ?.indexOf("str",index):從index位置開始,查找子串在字符串中出現(xiàn)的位置,如果沒有找到返回-1;其他同數(shù)組的indexOf方法;
  .lastindexOf():同數(shù)組
  .substring(begin,end):從字符串中截取子串
    >>>只傳入一個參數(shù),表示從begin開始,到最后
    >>>傳入兩個參數(shù),表示從begin到end的區(qū)間,左閉右開
 ??.split("分隔符"):將字符串以指定分隔符分隔,存入數(shù)組中。傳入空""表示將字符串的每個字符分開放入數(shù)組
 ?.replace("old","new"):將字符串中的第一個old替換為new。
    ?>>>第一個參數(shù),可以是普通字符串,也可以是正則表達(dá)式;var str1 = str.replace("i","*");
    >>>如果是普通字符串,則只替換第一個old。如果是正則表達(dá)式,則可以根據(jù)正則的寫法要求,進(jìn)行替換。var str1 = str.replace(/s/g,"*");

?

4、date 日期類
①、new Date():返回當(dāng)前最新時間
  new Date("2017,8,31,12:34:56");返回指定時間
②、常用方法:
  .getFullYear():獲取4位年份
  .getMonth():獲取月份 0-11
  .getDate():獲取一個月中的第幾天 1-31
  .getDay():獲取一周中的第幾天 0-6,0表示周天
  .getHours():獲取小時
  .getMinutes():獲取分鐘
  .getSeconds():獲取秒function getTime(){


function getTime(){
  var dates = new Date();var year = dates.getFullYear(); var month = dates.getMonth();var date1 = dates.getDate();var day = dates.getDay();
var weeks = ["星期日","星期一","星期二","星期三","星期四","星期五","星期六",]

 
var hours = dates.getHours()<10?"0"+dates.getHours():dates.getHours();
 var minutes = dates.getMinutes()<10?"0"+dates.getMinutes():dates.getMinutes();
  var seconds = dates.getSeconds()<10?"0"+dates.getSeconds():dates.getSeconds();

  ?var div1 = document.getElementById("div1");
  
  div1.innerText = year+"年"+(month+1)+"月"+date1+"日"+weeks[day]+hours+":"+minutes+":"+seconds;

  setTimeout(arguments.callee,1000);
}

?

?

?

?

自定義對象

?

1、基本概念:
 ?、賹ο?#xff1a;擁有一系列無序?qū)傩院头椒ǖ募稀?br /> ?、阪I值對:對象中的數(shù)據(jù)是以鍵值對的形式存在。對象的每個屬性和方法,都對應(yīng)著一個鍵名,以鍵取值。
 ?、蹖傩?#xff1a;描述對象特征的一系列變量,稱為屬性?!緦ο笾械淖兞俊?br />  ?④方法:描述對象行為的一系列函數(shù),稱為方法?!緦ο笾械暮瘮?shù)】


2、對象的聲明
  ①使用字面量聲明:

  var obj = {
    key1 : value1,
    key2 : value2,
    func1 : function(){}
  }


  >>>對象中的數(shù)據(jù)是以鍵值對形式存儲,鍵與值之間用:分隔。多個鍵值對之間用,分隔。
  >>>對象中的鍵可以是除了數(shù)組/對象以外的任何數(shù)據(jù)類型。但是一般我們只用普通變量名作為鍵。
  >>>對象中的值可以是任何數(shù)據(jù)類型,包括數(shù)組和對象。
  
 ?、谑褂胣ew關(guān)鍵字聲明:

  var obj = new object(){
    obj.key1 = value1;
    obj.func1 = function(){}
  }


3、對象中屬性和方法的讀寫:
  ①.運(yùn)算符:對象名.屬性 對象名.方法();
  對象外部:this.屬性 this.方法
  內(nèi)部對象:對象名.屬性 對象名.方法();
  
 ?、谕ㄟ^["key"]調(diào)用:對象名.["屬性名"] 對象名.["方法名"]();
  >>>如果鍵中包含特殊字符,則只能使用第②種方式;
  >>>對象中,直接寫變量名,默認(rèn)為調(diào)用全局變量。如果需要調(diào)用對象滋生的屬性或者方法,需要使用對象名.屬性名, 或者this.屬性。
  person.age this.age 都可以,但推薦使用this關(guān)鍵字


  ?③刪除對象的屬性和方法:delete 對象名.屬性名/方法名
  delete person.age;

?

var person = {name : "張三",age : 14,say : function (){alert("我叫"+this.name+",今年"+person.age+"歲了!");} }console.log(person.name); console.log(person.age); person.say();

?效果:

?

?

?

轉(zhuǎn)載于:https://www.cnblogs.com/realsdg/p/7536438.html

總結(jié)

以上是生活随笔為你收集整理的JS基础--函数与BOM、DOM操作、JS中的事件以及内置对象的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。