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

歡迎訪問 生活随笔!

生活随笔

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

javascript

前端JavaScript学习小总结

發(fā)布時間:2023/12/20 javascript 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 前端JavaScript学习小总结 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

目錄


一、JavaScript介紹

二、JavaScript與ECMAScript的關(guān)系

三、JavaScript引入到文件

四、JavaScript輸出方式

五、數(shù)據(jù)類型

六、運(yùn)算符? ?

七、條件語句

八、字符串

? ? ? ? 1.簡介

? ? ? ? 2.屬性 ? ?

? ? ? ? 3.方法

? ? ? ? ? ? a. charAt()

? ? ? ? ? ? b.concat()

? ? ? ? ? ? c.substring()

? ? ? ? ? ? d.substr()

? ? ? ? ? ? e.indexOf()

? ? ? ? ? ? f.trim()

? ? ? ? ? ? g.split()

九、數(shù)組

? ? ?數(shù)組的遍歷

? ? ?數(shù)組方法

? ? ? ? ? ? 1.Array.isArray()

? ? ? ? ? ? 2.push()/pop()

? ? ? ? ? ? 3.shift()/unshift()

? ? ? ? ? ? 4.join()

? ? ? ? ? ? 5.concat()

? ? ? ? ? ? 6.reverse()

? ? ? ? ? ? 7.indexOf()

十、函數(shù)

十一、對象

? ? ? ? 1.簡介

? ? ? ? 2.Math對象

? ? ? ? ? ? 1.Math.abs()

? ? ? ? ? ? 2.Math.max(),Math.min()

? ? ? ? ? ? 3.Math.floor(),Math.ceil()

? ? ? ? ? ? 4.Math.random()

? ? ? ? 3.Date對象

? ? ? ? ? ? 1.Date.now()

? ? ? ? ? ? 2.時間戳

????????????3.實例方法get類

十二、DOM概述

? ? ? ? 1.介紹

? ? ? ? 2.節(jié)點

? ? ? ? 3.節(jié)點樹

? ? ? ? 4.document對象_方法/獲取元素

? ? ? ? ? ? ? ? a.getElementsByTagName()

? ? ? ? ? ? ? ? b.getElementsByClassName()

? ? ? ? ? ? ? ? c.getElementsByName()

? ? ? ? ? ? ? ? d.getElementById()

? ? ? ? ? ? ? ? e.querySelector()

? ? ? ? ? ? ? ? f.querySelectorAll()

? ? ? ? 5.document對象_方法/創(chuàng)建元素

? ? ? ? ? ? ? ? a.document.createElement()

? ? ? ? ? ? ? ? b.document.createTextNode()

? ? ? ? ? ? ? ? c.document.createAttribute()

? ? ? ? 6.Element對象_屬性

? ? ? ? ? ? a.Element.id

? ? ? ? ? ? b.Element.className

? ? ? ? ? ? c.Element.classList

? ? ? ? ? ? d.Element.innerHTML

? ? ? ? ? ? e.Element.innerText

?????????7.Element獲取元素位置

?????????8.CSS操作

? ? ? ? ? ? a.setAttribute

? ? ? ? ? ? b.元素節(jié)點的 style 屬性

? ? ? ? ? ? c.cssText 屬性

?????????9.事件處理程序

? ? ? ? ? ? a.HTML事件處理

? ? ? ? ? ? b.DOM0級事件處理

? ? ? ? ? ? c.DOM2級事件處理

????????10.事件類型之鼠標(biāo)事件

????????11.Event事件對象

? ? ? ? ? ? ? ? 1 Event.Target

? ? ? ? ? ? ? ? 2 Event.type

? ? ? ? ? ? ? ? 3?Event.preventDefault()

? ? ? ? ? ? ? ?4 Event.stopPropagation()

????????12.事件類型之鍵盤事件

????????13.事件類型之表單事件

? ? ? ? ? ? 1 input事件

? ? ? ? ? ? 2 select事件

? ? ? ? ? ? 3 Change事件

? ? ? ? ? ? 4 reset事件

? ? ? ? ? ? 5 submit事件

????????14.事件代理(事件委托)

????????15.定時器

? ? ? ? ? ? 1 setTimeout ()

? ? ? ? ? ? 2 setInterval ()

????????16.防抖(debounce)

????????17.節(jié)流(throttle)

十三、總結(jié)


前言

? ? ?大二暑假在家,由于之前在學(xué)校做課設(shè)的時候,自己想做好看的界面,但總是在樣式上調(diào)試很久,參考網(wǎng)上代碼時也有些地方看不懂,想著系統(tǒng)復(fù)習(xí)和學(xué)習(xí)一下前端知識,希望能在以后的項目里熟練地寫出好看的界面。為了記錄我的學(xué)習(xí)過程也方便我以后查看,于是就有了在CSDN上寫博客的想法。這篇是關(guān)于JavaScript的總結(jié) !


一、JavaScript介紹

? ? JavaScript 是一種輕量級的腳本語言。所謂“腳本語言”,指的是它不具備開發(fā)操作系統(tǒng)的能力,

? ? 而是只用來編寫控制其他大型應(yīng)用程序的“腳本”。JavaScript 是一種嵌入式語言。

? ? 它本身提供的核心語法不算很多。

二、JavaScript與ECMAScript的關(guān)系

? ? ECMAScript和JavaScript的關(guān)系是,前者是后者的規(guī)格,后者是前者的一種實現(xiàn)。在日常場合,?這兩個詞是可以互換的。

?三、JavaScript引入到文件

? ? ? ? 1.嵌入到HTML文件中,body或者h(yuǎn)ead標(biāo)簽里。

? ? ? ? ? ? <body>

? ? ? ? ? ? ? ? <script>

? ? ? ? ? ? ? ? ? ? var age = 20

? ? ? ? ? ? ? ? </script>

? ? ? ? ? ? </body>

? ? ? ? 2.引入本地獨(dú)立JS文件。

? ? ? ? ? ? <body>

? ? ? ? ? ? ? ? <script type="text/javascript"src="./itbaizhan.js"> ?

? ? ? ? ? ? ? ? </script>

? ? ? ? ? ? </body>

? ? ? ? 3.引入網(wǎng)絡(luò)來源文件

? ? ? ? ? ? <body>

? ? ? ? ? ? ? ? <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.6.0/jquery.min.js">

? ? ? ? ? ? ? ? </script>

? ? ? ? ? ? </body>

? ? 四、JavaScript輸出方式

? ? ? ? ? ? 1.彈出對話框

? ?????????????alert("要輸出的內(nèi)容");

? ? ? ? ? ? ? ? ps:在瀏覽器中彈出一個對話框,然后把要輸出的內(nèi)容展示出來,

? ? ? ? ? ? ? ? ? ? alert都是把要輸出的內(nèi)容首先轉(zhuǎn)換為字符串然后在輸出的

? ? ? ? ? ? 2.在頁面中輸出 ?

? ? ? ? ? ? ? ?document.write("要輸出的內(nèi)容");

? ? ? ? ? ? 3.在控制臺輸出內(nèi)容

? ? ? ? ? ? ? ? console.log("要輸出的內(nèi)容");

? ? 五、數(shù)據(jù)類型

? ? ? ? ? ? JavaScript 語言的每一個值,都屬于某一種數(shù)據(jù)類型。JavaScript 的數(shù)據(jù)類型,共有六種。(ES6 又新增了第七種 Symbol 類型的值和第八種 BigInt類型)

? ? ? ? 1.原始類型(基礎(chǔ)類型):數(shù)值number、字符串string、布爾值boolean

? ? ? ? ? ? var age = 20;

? ? ? ? ? ? var name = "尚學(xué)堂";

? ? ? ? ? ? var learn = true;

? ? ? ? 2.合成類型(復(fù)合類型)

? ? ? ? ? ? 對象object:因為一個對象往往是多個原始類型的值的合成,可以看作是一個存放各種值的容器。

? ? ? ? ? ? var user = {

? ? ? ? ? ? ? ? name:"尚學(xué)堂", ? ?

? ? ? ? ? ? ? ? age:20, ?

? ? ? ? ? ? ? ? learn:true

? ? ? ? ? ?}

? ? ? ? 溫馨提示:

? ? ? ? ? ? 至于undefined和null,一般將它們看成兩個特殊值。

? ? 六、運(yùn)算符

? ? ? ? 1.對象運(yùn)算符 typeof

? ? ? ? ? ?typeof 123 // "number"

? ? ? ? ? ?typeof '123' // "string"

? ? ? ? ? ?typeof false // "boolean"

? ? ? ? ? ?typeof {} // "object"

? ? ? ? ? ?unll和undefined的區(qū)別:都表示“沒有”,語法效果幾乎沒區(qū)別,可以說一個是數(shù)值為空,一個是對象為空

? ? ? ? 2.算術(shù)運(yùn)算符

? ? ? ? ? ? 加:10 + 10; // 20

? ? ? ? ? ? 減:100 - 10; // 90

? ? ? ? ? ? 乘:10 * 2; //20

? ? ? ? ? ? 除:10 / 5; 2

? ? ? ? ? ? 余數(shù):13 % 5 // 3

? ? ? ? ? ? 自增:var x = 1; ++x // 2

? ? ? ? ? ? 自減:var y = 1; --y // 0

? ? ? ? ? ? ? ? ps:自增和自減運(yùn)算符有一個需要注意的地方,就是放在變量之后,會先返回變量操作前的值,?再進(jìn)行自增/自減操作;放在變量之前,會先進(jìn)行自增/自減操作,再返回變量操作后的值。

? ? ? ? ? ? ? ? console.log(x++ + y);// 2

? ? ? ? 3.賦值運(yùn)算符

? ? ? ? ? ?// 將 1 賦值給變量 x

? ? ? ? ? ? ? ? var x = 1;

? ? ? ? ? ?// 將變量 y 的值賦值給變量 x

? ? ? ? ? ? ? ? var x = y;

? ? ? ? ? ?// 等同于 x = x + y

? ? ? ? ? ? ? ? x += y

? ? ? ? 4.比較運(yùn)算符

? ? ? ? ? ? <? ? ? ? ? ?小于運(yùn)算符

? ? ? ? ? ? >? ? ? ? ? ?大于運(yùn)算符

? ? ? ? ? ? <=? ? ? ? ?小于或等于運(yùn)算符

? ? ? ? ? ? >= ????????大于或等于運(yùn)算符

? ? ? ? ? ? == ????????相等運(yùn)算符

? ? ? ? ? ? === ??????嚴(yán)格相等運(yùn)算符

? ? ? ? ? ? !=? ? ? ? ? 不相等運(yùn)算符

? ? ? ? ? ? !== ???????嚴(yán)格不相等運(yùn)算符

? ? ? ? 5.布爾運(yùn)算符

? ? ? ? ? ?取反運(yùn)算符(!):!true // false; 對于非布爾值,取反運(yùn)算符會將其轉(zhuǎn)為布爾值。

? ? ? ? ? ?且運(yùn)算符(&&):多個條件都要滿足 console.log(10 < 20 && 10 >5); // true

? ? ? ? ? ?或運(yùn)算符(||):? ?滿足一個條件即可 console.log(10 < 20 || 10 < 5); // true? ? ??

????????6.三元運(yùn)算符

? ? ? ? ? ? (條件) ? 表達(dá)式1 : 表達(dá)式2

? ? ? ? ? ? 當(dāng)條件的布爾值為true時,執(zhí)行表達(dá)式1否則執(zhí)行表達(dá)式2。 ? ?

? ?

七、條件語句

? ? ? ? 1.if語句

? ? ? ? ? ?if (布爾值){

?? ? ? ? ? ? ? 語句;

? ? ? ? ? ? }

? ? ? ? 2.if...else

? ? ? ? ? ? if (m === 3) {

? ? ? ? ? ? ?// 滿足條件時,執(zhí)行的語句

? ? ? ? ? ? } else {

? ? ? ? ? ? ?// 不滿足條件時,執(zhí)行的語句

? ? ? ? ? ? } ?

? ? ? ? 3.switch

? ? ? ? ? ? switch (x) {

? ? ? ? ? ? ?case 1:

? ? ? ? ? ? ? ?console.log('x 等于1');

? ? ? ? ? ? ?case 2:

? ? ? ? ? ? ? ?console.log('x 等于2');

? ? ? ? ? ? ?default:

? ? ? ? ? ? ? ?console.log('x 等于其他值');

? ? ? ? ? ? }

? ? ? ? ? ? // x等于1

? ? ? ? ? ? // x等于2

? ? ? ? ? ? // x等于其他值

? ? ? ? ? ? ps:需要注意的是,每個case代碼塊內(nèi)部的break語句不能少,否則會接下去執(zhí)行下一個case代碼塊,?而不是跳出switch結(jié)構(gòu)。? ? ? ?

? ? ? ? 4.for

? ? ? ? ? ? for (初始化表達(dá)式; 條件; 迭代因子) {

? ? ? ? ? ? ? ? ? ? ?語句

? ? ? ? ? ? ? ? }

? ? ? ? ? ? a 初始化表達(dá)式(initialize):確定循環(huán)變量的初始值,只在循環(huán)開始時執(zhí)行一次。

? ? ? ? ? ? b 布爾表達(dá)式(test):每輪循環(huán)開始時,都要執(zhí)行這個條件表達(dá)式,只有值為真,才繼續(xù)進(jìn)行循環(huán)。

? ? ? ? ? ? c 迭代因子(increment):每輪循環(huán)的最后一個操作,通常用來遞增循環(huán)變量。

? ? ? ? ? ? d for語句的三個表達(dá)式,可以省略任何一個,也可以全部省略。但把條件表達(dá)式省略會變成無限循環(huán)。

? ? ? ? ? ? //循環(huán)輸出1~100之間數(shù)字的和

? ? ? ? ? ? var sum=0;

? ? ? ? ? ? for(var i=1;i<=100;i++){

? ? ? ? ? ? ? ?sum+=i; }

? ? ? ? ? ? console.log(sum);

? ? ? ? ? ? //打印九九乘法表

? ? ? ? ? ? for(var i = 1;i <= 9;i++){

? ? ? ? ? ? ? ?document.write("<br>");

? ? ? ? ? ? ? ?for(var j = 1;j <= i;j++){

? ? ? ? ? ? ? ? ? ?sum = i * j;

? ? ? ? ? ? ? ? ? ?document.write(i ,"*" ,j ,"=" ,sum ," ");

? ? ? ? ? ? ? ? }

? ? ? ? ? ? }

? ? ? ?5.while

? ? ? ? ?ps :所有for循環(huán),都可以改寫成while循環(huán)

? ? ? ? ? ? while (條件) {

? ? ? ? ? ? ? ? ?語句;

? ? ? ? ? ? }

? ? ? ? ? ? //例子

? ? ? ? ? ? var i = 0;

? ? ? ? ? ? while (i < 100) {

? ? ? ? ? ? ??console.log('i 當(dāng)前為:' + i);

? ? ? ? ? ? ??i = i + 1;

? ? ? ? ? ? }

? ? ? ? 6.break 語句和 continue 語句

? ? ? ? ? 1? break語句用于跳出代碼塊或循環(huán)

? ? ? ? ? ? for (var i = 0; i < 5; i++) {

? ? ? ? ? ? ? ?if (i === 3){

? ? ? ? ? ? ? ? ? ?break;

? ? ? ? ? ? ? }

? ? ? ? ? ? ? ?console.log(i);

? ? ? ? ? ? }

? ? ? ? ? ?2 continue語句用于立即終止本輪循環(huán),返回循環(huán)結(jié)構(gòu)的頭部,開始下一輪循環(huán)

? ? ? ? ? ? for (var i = 0; i < 5; i++) {

? ? ? ? ? ? ? ?if (i === 3){

? ? ? ? ? ? ? ? ? ?continue;

? ? ? ? ? ? ? }

? ? ? ? ? ? ? ?console.log(i);

? ? ? ? ? ? }? ? ? ? ? ? ??

? ? 八、字符串

? ? ? ? 1.簡介

? ? ? ? ? ? 字符串就是零個或多個排在一起的字符,放在單引號或雙引號之中。單引號字符串的內(nèi)部,?可以使用雙引號。雙引號字符串的內(nèi)部,可以使用單引號。

? ? ? ? ? ? 'itbaizhan'

? ? ? ? ? ? "itbaizhan"

? ? ? ? ? ? 'key = "value"'

? ? ? ? ? ? "It's a long itbaizhan"

? ? ? ? ? ? 注意:字符串默認(rèn)只能寫在一行內(nèi),分成多行將會報錯

? ? ? ? 2.屬性 ? ?

? ? ? ? ? ? length屬性返回字符串的長度,該屬性也是無法改變的 ? ?

? ? ? ? ? ? ? ? var s = 'itbaizhan';

? ? ? ? ? ? ? ? s.length // 9

? ? ? ? 3.方法

? ? ? ? ? ? a. charAt()

????????????????charAt 方法返回指定位置的字符,參數(shù)是從 0 開始編號的

? ? ? ? ? ? ? ? var s = new String('itbaizhan');

? ? ? ? ? ? ? ? s.charAt(1) // "t"

? ? ? ? ? ? ? ? s.charAt(s.length - 1) // "n"

? ? ? ? ? ? ? ? 注意:如果參數(shù)為負(fù)數(shù),或大于等于字符串的長度, charAt 返回空字符串

? ? ? ? ? ? ? ? 'itbaizhan'.charAt(-1) // ""

? ? ? ? ? ? ? ? 'itbaizhan'.charAt(9) // ""

? ? ? ? ? ? b.concat()

????????????????concat 方法用于連接兩個字符串,返回一個新字符串,不改變原字符串

? ? ? ? ? ? ? ? var s1 = 'itbaizhan';

? ? ? ? ? ? ? ? var s2 = 'sxt';

? ? ? ? ? ? ? ? s1.concat(s2) // "itbaizhansxt"

? ? ? ? ? ? ? ? s1 // "itbaizhan"

? ? ? ? ? ? ? ? 該方法可以接受多個參數(shù)

? ? ? ? ? ? ? ? 'sxt'.concat('itbaizhan', 'bjsxt') //"sxtitbaizhanbjsxt"

? ? ? ? ? ? ? ? 如果參數(shù)不是字符串, concat 方法會將其先轉(zhuǎn)為字符串,然后再連接

? ? ? ? ? ? ? ? var one = 1;

? ? ? ? ? ? ? ? var two = 2;

? ? ? ? ? ? ? ? var three = '3';

? ? ? ? ? ? ? ? ''.concat(one, two, three) // "123"

? ? ? ? ? ? ? ? console.log(one + two + three )//33

? ? ? ? ? ? c.substring()

?????????substring方法用于從原字符串取出子字符串并返回,不改變原字符串。它的第一個參數(shù)表示子字符串的開始位置,第二個位置表示結(jié)束位置(返回結(jié)果不含該位置)。

? ? ? ? ? ? ? ? 規(guī)則:

? ? ? ? ? ? ? ? ? ? 1.如果省略第二個參數(shù),則表示子字符串一直到原字符串的結(jié)束

? ? ? ? ? ? ? ? ? ? 2.如果第一個參數(shù)大于第二個參數(shù), substring 方法會自動更換兩個參數(shù)的位置

? ? ? ? ? ? ? ? ? ? 3.如果參數(shù)是負(fù)數(shù), substring 方法會自動將負(fù)數(shù)轉(zhuǎn)為0 ? ? ?

? ? ? ? ? ? ? ? ? ? 'itbaizhan'.substring(0, 2) // "it"

? ? ? ? ? ? ? ? ? ? 'itbaizhan'.substring(2) // "baizhan" ?

? ? ? ? ? ? ? ? ? ? 'itbaizhan'.substring(2, -3) // "it"? ?? ? ?

? ? ? ? ? ? d.substr()

????????substr方法用于從原字符串取出子字符串并返回,不改變原字符串,跟 substring 方法的作用相同。substr 方法的第一個參數(shù)是子字符串的開始位置(從0開始計算),第二個參數(shù)是子字符串的長度。

? ? ? ? ? ? ? ? 規(guī)則:

? ? ? ? ? ? ? ? ? ? 1.如果省略第二個參數(shù),則表示子字符串一直到原字符串的結(jié)束

? ? ? ? ? ? ? ? ? ? 2.如果第一個參數(shù)是負(fù)數(shù),表示倒數(shù)計算的字符位置。

? ? ? ? ? ? ? ? ? ? 3.如果第二個參數(shù)是負(fù)數(shù),將被自動轉(zhuǎn)為0,因此會返回空字符串

? ? ? ? ? ? ? ? ? ? 'itbaizhan'.substr(2, 7); // baizhan

? ? ? ? ? ? ? ? ? ? 'itbaizhan'.substr(2) // "baizhan"

? ? ? ? ? ? ? ? ? ? 'itbaizhan'.substr(-7) // "baizhan"

? ? ? ? ? ? ? ? ? ? 'itbaizhan'.substr(4, -1) // "" ? ?

? ? ? ? ? ? e.indexOf()

????????indexOf 方法用于確定一個字符串在另一個字符串中第一次出現(xiàn)的位置,返回結(jié)果是匹配開始的位置。如果返回 -1 ,就表示不匹配。

? ? ? ? ? ? ? ? ? ? ? ? 'hello world'.indexOf('o') // 4

? ? ? ? ? ? ? ? ? ? ? ? 'itbaizhan'.indexOf('sxt') // -1

? ? ? ? ? ? ? ? ? ? ? ? indexOf 方法還可以接受第二個參數(shù),表示從該位置開始向后匹配

? ? ? ? ? ? ? ? ? ? ? ? 'hello world'.indexOf('o', 6) // 7

? ? ? ? ? ? f.trim()

????????? trim 方法用于去除字符串兩端的空格、制表符( \t 、 \v )、換行符( \n )和回車符( \r ),返回一個新字符串,不改變原字符串。

? ? ? ? ? ? ? ? ? ? ? ? ' hello world '.trim()// "hello world"

? ? ? ? ? ? ? ? ? ? ? ? '\r\nitbaizhan \t'.trim() // 'itbaizhan'

? ? ? ? ? ? g.split()

????????split 方法按照給定規(guī)則分割字符串,返回一個由分割出來的子字符串組成的數(shù)組。

? ? ? ? ? ? ? ? ? ? 規(guī)則:

? ? ? ? ? ? ? ? ? ? ? ? 1.如果分割規(guī)則為空字符串,則返回數(shù)組的成員是原字符串的每一個字符

? ? ? ? ? ? ? ? ? ? ? ? 2.如果省略參數(shù),則返回數(shù)組的唯一成員就是原字符串

? ? ? ? ? ? ? ? ? ? ? ? 3.接受第二個參數(shù),限定返回數(shù)組的最大成員數(shù)

? ? ? ? ? ? ? ? ? ? ? ? 'it|sxt|baizhan'.split('|') // ["it", "sxt","baizhan"]

? ? ? ? ? ? ? ? ? ? ? ? 'a|b|c'.split('') // ["a", "|", "b","|","c"]

? ? ? ? ? ? ? ? ? ? ? ? 'it|sxt|bz'.split() // [it|sxt|bz]

? ? ? ? ? ? ? ? ? ? ? ? 'it|sxt|bz'.split('|', 0) // []

? ? ? ? ? ? ? ? ? ? ? ? 'it|sxt|bz'.split('|', 1) // ["it"]

? ? ? ? ? ? ? ? ? ? ? ? 'it|sxt|bz'.split('|', 2) // ["it", "sxt"]

? ? 九、數(shù)組

? ? ? ? 1.簡介

? ? ? ? ? ? 數(shù)組(array)是按次序排列的一組值。每個值的位置都有編號(從0開始),整個數(shù)組用方括號表示。

? ? ? ? ? ? ? ? var arr = ['sxt', 'baizhan', 'it'];

? ? ? ? ? ? 任何類型的數(shù)據(jù),都可以放入數(shù)組

? ? ? ? ? ? ? ? var arr = [ 100, [1, 2, 3],false ];

? ? ? ? 2.length 屬性:

? ? ? ? ? ? 數(shù)組的length屬性,返回數(shù)組的成員數(shù)量

? ? ? ? ? ? ['sxt', 'baizhan', 'it'].length // 3

? ? ? ? 3.數(shù)組的遍歷

? ? ? ? ? ? 數(shù)組的遍歷可以考慮使用for循環(huán)或while循環(huán)

? ? ? ? ? ? ? ? var a = ['sxt', 'baizhan', 'it'];

? ? ? ? ? ? ? ? // for循環(huán)

? ? ? ? ? ? ? ? for(var i = 0; i < a.length; i++) {

? ? ? ? ? ? ? ? ?console.log(a[i]);

? ? ? ? ? ? ? ? }

? ? ? ? ? ? ? ? // while循環(huán)

? ? ? ? ? ? ? ? var i = 0;

? ? ? ? ? ? ? ? while (i < a.length) {

? ? ? ? ? ? ? ? ?console.log(a[i]);

? ? ? ? ? ? ? ? ?i++;

? ? ? ? ? ? ? ? }

? ? ? ? ? ? for...in遍歷數(shù)組

? ? ? ? ? ? ? ? var a = ['sxt', 'baizhan', 'it'];

? ? ? ? ? ? ? ? for (var i in a) {

? ? ? ? ? ? ? ? ? ? console.log(a[i]);

? ? ? ? ? ? ? ? }

? ? ? ? 4.數(shù)組方法

? ? ? ? ? ? 1.Array.isArray()

? ? ? ? ? ? ? ? Array.isArray 方法返回一個布爾值,表示參數(shù)是否為數(shù)組。它可以彌補(bǔ)typeof 運(yùn)算符的不足。

? ? ? ? ? ? ? ? var arr = ["尚學(xué)堂", 100, true];

? ? ? ? ? ? ? ? console.log(typeof arr); // object

? ? ? ? ? ? ? ? var arr = ['sxt', 'baizhan', 'it'];

? ? ? ? ? ? ? ? Array.isArray(arr) // true

? ? ? ? ? ? 2.push()/pop()

? ? ? ? ? ? ? ? push 方法用于在數(shù)組的末端添加一個或多個元素,并返回添加新元素后的數(shù)組長度。

pop 方法用于刪除數(shù)組的最后一個元素,并返回該元素。兩者都會改變數(shù)組長度。

? ? ? ? ? ? ? ? var arr = [];

? ? ? ? ? ? ? ? arr.push("尚學(xué)堂") // 1

? ? ? ? ? ? ? ? arr.push('itbaizhan') // 2

? ? ? ? ? ? ? ? arr.push(true, {}) // 4

? ? ? ? ? ? ? ? arr // [尚學(xué)堂, 'itbaizhan', true, {}

? ? ? ? ? ? ? ? var arr = ['尚學(xué)堂', 'itbaizhan', 'WEB前端'];

? ? ? ? ? ? ? ? arr.pop() // 'WEB前端'

? ? ? ? ? ? ? ? arr // ['尚學(xué)堂', 'itbaizhan']

? ? ? ? ? ? 3.shift()/unshift()

? ? ? ? ? ? ? ? shift 方法用于刪除數(shù)組的第一個元素,并返回該元素。unshift 方法用于在數(shù)組的第一個位置添加元素,并返回添加新元素后的數(shù)組長度。

? ? ? ? ? ? ? ? var arr = ['尚學(xué)堂', 'itbaizhan', 'WEB前端'];

? ? ? ? ? ? ? ? arr.shift() // '尚學(xué)堂'

? ? ? ? ? ? ? ? arr // ['itbaizhan', 'WEB前端']

? ? ? ? ? ? ? ? var arr = ['尚學(xué)堂', 'itbaizhan', 'WEB前端'];

? ? ? ? ? ? ? ? arr.unshift('baizhan'); // 4

? ? ? ? ? ? ? ? arr // ['baizhan', '尚學(xué)堂', 'itbaizhan', 'WEB前端']

? ? ? ? ? ? 4.join()

? ? ? ? ? ? ? ? join 方法以指定參數(shù)作為分隔符,將所有數(shù)組成員連接為一個字符串返回。如果不提供參數(shù),默認(rèn)用逗號分隔。數(shù)組的 join 配合字符串的 split()可以實現(xiàn)數(shù)組與字符串的互換。

? ? ? ? ? ? ? ? var a = [1, 2, 3, 4];

? ? ? ? ? ? ? ? a.join(' ') // '1 2 3 4'

? ? ? ? ? ? ? ? a.join(' | ') // "1 | 2 | 3 | 4"

? ? ? ? ? ? ? ? a.join() // "1,2,3,4"

? ? ? ? ? ? ? ? 如果數(shù)組成員是 undefined 或 null 或空位,會被轉(zhuǎn)成空字符串

? ? ? ? ? ? ? ? [undefined, null].join('#') ?// '#'

? ? ? ? ? ? ? ? ['a',, 'b'].join('-') // 'a--b

? ? ? ? ? ? 5.concat()

? ? ? ? ? ? ? ? concat 方法用于多個數(shù)組的合并。它將新數(shù)組的成員,添加到原數(shù)組成員的后部,

然后返回一個新數(shù)組,原數(shù)組不變。

? ? ? ? ? ? ? ? ['hello'].concat(['world'])// ["hello", "world"]

? ? ? ? ? ? ? ? ['hello'].concat(['world'], ['!'])// ["hello", "world", "!"]

? ? ? ? ? ? ? ? 除了數(shù)組作為參數(shù), concat 也接受其他類型的值作為參數(shù),添加到目標(biāo)數(shù)組尾部。

? ? ? ? ? ? ? ? [1, 2, 3].concat(4, 5, 6) ?// [1, 2, 3, 4, 5, 6]

? ? ? ? ? ? 6.reverse()

? ? ? ? ? ? ? ? reverse 方法用于顛倒排列數(shù)組元素,返回改變后的數(shù)組。注意,該方法將改變原數(shù)組

? ? ? ? ? ? ? ? var a = ['a', 'b', 'c'];

? ? ? ? ? ? ? ? a.reverse() // ["c", "b", "a"]

? ? ? ? ? ? ? ? a // ["c", "b", "a"]

? ? ? ? ? ? ? ? 實現(xiàn)一個字符串反轉(zhuǎn)排列

? ? ? ? ? ? ? ? var str = "hello";

? ? ? ? ? ? ? ? str.split("").reverse().join("")

? ? ? ? ? ? 7.indexOf()

? ? ? ? ? ? ? ? indexOf 方法返回給定元素在數(shù)組中第一次出現(xiàn)的位置,如果沒有出現(xiàn)則返回 -1

? ? ? ? ? ? ? ? var arr = ['a', 'b', 'c'];

? ? ? ? ? ? ? ? arr.indexOf('b') // 1

? ? ? ? ? ? ? ? arr.indexOf('y') // -1

? ? ? ? ? ? ? ? indexOf 方法還可以接受第二個參數(shù),表示搜索的開始位置

? ? ? ? ? ? ? ? ['尚學(xué)堂', '百戰(zhàn)程序員','itbaizhan'].indexOf('尚學(xué)堂', 1) // -1

?十、函數(shù)

? ? ? ? 1.函數(shù)的聲明

? ? ? ? ? ? function 命令: function命令聲明的代碼區(qū)塊,就是一個函數(shù)。function命令后面是函數(shù)名,函數(shù)名后面是一對圓括號,里面是傳入函數(shù)的參數(shù)。函數(shù)體放在大括號里面。

? ? ? ? ? ? function print(s) {

? ? ? ? ? ? ? ? ?console.log(s);

? ? ? ? ? ? }

? ? ? ? 2.函數(shù)名的提升

? ? ? ? ? ? JavaScript 引擎將函數(shù)名視同變量名,所以采用function命令聲明函數(shù)時,整個函數(shù)會像變量聲明一樣,被提升到代碼頭部。

? ? ? ? 3.函數(shù)參數(shù)

? ? ? ? ? ? 函數(shù)運(yùn)行的時候,有時需要提供外部數(shù)據(jù),不同的外部數(shù)據(jù)會得到不同的結(jié)果,這種外部數(shù)據(jù)就叫參數(shù)。

? ? ? ? 4.函數(shù)返回值

? ? ? ? ? ? JavaScript函數(shù)提供兩個接口實現(xiàn)與外界的交互,其中參數(shù)作為入口,接收外界信息;返回值作為出口,把運(yùn)算結(jié)果反饋給外界。

? ? ? ? ? ? function getName(name){

? ? ? ? ? ? ? ?return name;

? ? ? ? ? ? }

? ? ? ? ? ? var myName = getName("itbaizhan")

? ? ? ? ? ? console.log(myName); // itbaizhan

? ? ? ? ? ? 溫馨提示:return 后面不能在添加任何代碼,因為不會執(zhí)行

? ? 十一、對象

? ? ? ? 1.簡介

? ? ? ? ? ? 對象(object)是 JavaScript 語言的核心概念,也是最重要的數(shù)據(jù)類型。簡單說,

對象就是一組“鍵值對”(key-value)的集合,是一種無序的復(fù)合數(shù)據(jù)集合。

? ? ? ? ? ? var user = {

? ? ? ? ? ? ? ? name: 'itbaizhan',

? ? ? ? ? ? ? ? age: '13'

? ? ? ? ? ? };

? ? ? ? ? ? 對象的每一個鍵名又稱為“屬性”(property),它的“鍵 值”可以是任何數(shù)據(jù)類型。如果一個屬性的值為函數(shù),通常把這個屬性稱為“方法”,它可以像函數(shù)那樣調(diào)用。

? ? ? ? ? ? var user = {

? ? ? ? ? ? ? ? getName: function (name) {

? ? ? ? ? ? ? ? ? ?return name;

? ? ? ? ? ? ? ? }

? ? ? ? ? ? };

? ? ? ? ? ? user.getName("itbaizhan") // itbaizhan

? ? ? ? ? ? 如果屬性的值還是一個對象,就形成了鏈?zhǔn)揭?/p>

? ? ? ? ? ? var user = {

? ? ? ? ? ? ? ?name:"itbaizhan",

? ? ? ? ? ? ? ?age:13,

? ? ? ? ? ? ? ?container:{

? ? ? ? ? ? ? ? ? ?frontEnd:["Web前端","Android","iOS"],

? ? ? ? ? ? ? ? ? ?backEnd:["Java","Python"]

? ? ? ? ? ? ? ? }

? ? ? ? ? ? }

? ? ? ? ? ? user.container.frontEnd // ["Web前 端","Android","iOS"]

? ? ? ? 2.Math對象

? ? ? ? ? ? Math是 JavaScript 的原生對象,提供各種數(shù)學(xué)功能。

? ? ? ? ? ? 1.Math.abs()

????????????????Math.abs 方法返回參數(shù)值的絕對值

? ? ? ? ? ? ? ? Math.abs(1) // 1

? ? ? ? ? ? ? ? Math.abs(-1) // 1

? ? ? ? ? ? 2.Math.max(),Math.min()

? ? ? ? ? ? ? ? Math.max 方法返回參數(shù)之中最大的那個值, Math.min 返回最小的那個值。如果參數(shù)為空, Math.min 返回 Infinity , Math.max 返回 -Infinity 。

? ? ? ? ? ? ? ? Math.max(2, -1, 5) // 5

? ? ? ? ? ? ? ? Math.min(2, -1, 5) // -1

? ? ? ? ? ? ? ? Math.min() // Infinity

? ? ? ? ? ? ? ? Math.max() // -Infinity

? ? ? ? ? ? 3.Math.floor(),Math.ceil()

???????????????Math.floor()向下取整,Math.ceil()向上取整

? ? ? ? ? ? ? ? Math.floor(3.2) // 3

? ? ? ? ? ? ? ? Math.floor(-3.2) // -4

? ? ? ? ? ? ? ? Math.ceil(3.2) // 4

? ? ? ? ? ? ? ? Math.ceil(-3.2) // -3

? ? ? ? ? ? 4.Math.random()

? ? ? ? ? ? ? ? Math.random() 返回0到1之間的一個偽隨機(jī)數(shù),可能等于0,但是一定小于1。

? ? ? ? ? ? ? ? Math.random() // 0.28525367438365223

? ? ? ? ? ? ? ? //任意范圍的隨機(jī)數(shù)生成函數(shù)如下

? ? ? ? ? ? ? ? function getRandomArbitrary(min, max) {

? ? ? ? ? ? ? ? ?return Math.random() * (max - min) + min;

? ? ? ? ? ? ? ? }

? ? ? ? ? ? ? ? getRandomArbitrary(5, 10)//得到5到10之間的隨機(jī)數(shù)

? ? ? ? 3.Date對象

? ? ? ? ? ? Date 對象是 JavaScript 原生的時間庫。它以1970年1月1日00:00:00 作為時間的零點,可以表示的時間范圍是前后各1億天(單位為毫秒)

? ? ? ? ? ? 1.Date.now()

? ? ? ? ? ? ? ? Date.now 方法返回當(dāng)前時間距離時間零點(1970年1月1日 00:00:00UTC)的毫秒數(shù),

? ? ? ? ? ? ? ? 相當(dāng)于Unix時間戳乘以1000.

? ? ? ? ? ? ? ? Date.now(); ? // 1635216733395

? ? ? ? ? ? 2.時間戳

? ? ? ? ? ? ? ? 時間戳是指格林威治時間1970年01月01日00時00分00秒(北京時間1970年01月01日08時00分00秒)

? ? ? ? ? ? ? ? 起至現(xiàn)在的總秒數(shù)。Unix是20世紀(jì)70年代初出現(xiàn)的一個操作系統(tǒng),Unix認(rèn)為1970年1月1日0點是時間紀(jì)元。

? ? ? ? ? ? ? ? JavaScript也就遵循了這一約束。

?????????????3.實例方法get類

????????????????Date 對象提供了一系列 get* 方法,用來獲取實例對象某個方面的值:

? ? ? ? ? ? ? ? ? ? getTime():返回實例距離1970年1月1日00:00:00的毫秒數(shù)

? ? ? ? ? ? ? ? ? ? getDate():返回實例對象對應(yīng)每個月的幾號(從1開始)

? ? ? ? ? ? ? ? ? ? getDay():返回星期幾,星期日為0,星期一為1,以此類推

? ? ? ? ? ? ? ? ? ? getYear():返回距離1900的年數(shù)

? ? ? ? ? ? ? ? ? ? getFullYear():返回四位的年份

? ? ? ? ? ? ? ? ? ? getMonth():返回月份(0表示1月,11表示12月)

? ? ? ? ? ? ? ? ? ? getHours():返回小時(0-23)

? ? ? ? ? ? ? ? ? ? getMilliseconds():返回毫秒(0-999)

? ? ? ? ? ? ? ? ? ? getMinutes():返回分鐘(0-59)

? ? ? ? ? ? ? ? ? ? getSeconds():返回秒(0-59)

? ? ? ? ? ? ? ? var d = new Date('January 6, 2022');

? ? ? ? ? ? ? ? d.getDate() // 6

? ? ? ? ? ? ? ? d.getMonth() // 0

? ? ? ? ? ? ? ? d.getYear() // 122

? ? ? ? ? ? ? ? d.getFullYear() // 2022

? ? ? ? ? ? ? ? //編寫函數(shù)獲得本年度剩余天數(shù)

? ? ? ? ? ? ? ? function leftDays() {

? ? ? ? ? ? ? ? ?var today = new Date();

? ? ? ? ? ? ? ? ?var endYear = new Date(today.getFullYear(),11, 31, 23, 59, 59, 999);

? ? ? ? ? ? ? ? ?var msPerDay = 24 * 60 * 60 * 1000;

? ? ? ? ? ? ? ? ?return Math.round((endYear.getTime() - today.getTime()) / msPerDay);

? ? ? ? ? ? ? ? }

十二、DOM概述

? ? ? ? 1.介紹

? ? ? ? ? ? DOM 是 JavaScript 操作網(wǎng)頁的接口,全稱為“文檔對象模型”(DocumentObjectModel)。它的作用是將網(wǎng)頁轉(zhuǎn)為一個JavaScript 對象,從而可以用腳本進(jìn)行各種操作(比如對元素增刪內(nèi)容)。瀏覽器會根據(jù) DOM 模型,將結(jié)構(gòu)化文檔HTML解析成一系列的節(jié)點,再由這些節(jié)點組成一個樹狀結(jié)構(gòu)(DOM Tree)。

? ? ? ? ? ? 所有的節(jié)點和最終的樹狀結(jié)構(gòu),都有規(guī)范的對外接口DOM 只是一個接口規(guī)范,可以用各種語言實現(xiàn)。所以嚴(yán)格地說,DOM 不是 JavaScript 語法的一部分,但是 DOM 操作是 JavaScript最常見的任務(wù),離開了 DOM,JavaScript 就無法控制網(wǎng)頁。另一方面,JavaScript 也是最常用于 DOM 操作的語言。

? ? ? ? 2.節(jié)點

? ? ? ? ? ? DOM 的最小組成單位叫做節(jié)點(node)。文檔的樹形結(jié)構(gòu)(DOM樹),就是由各種不同類型的節(jié)點組成。每個節(jié)點可以看作是文檔樹的一片葉子。

? ? ? ? ? ? 節(jié)點的類型有七種:

? ? ? ? ? ? ? ? Document:????????????????整個文檔樹的頂層節(jié)點

? ? ? ? ? ? ? ? DocumentType:????????doctype標(biāo)簽

? ? ? ? ? ? ? ? Element:???????????????????網(wǎng)頁的各種HTML標(biāo)簽

? ? ? ? ? ? ? ? Attribute:???????????????????網(wǎng)頁元素的屬性(比如class="right")

? ? ? ? ? ? ? ? Text:? ? ? ? ? ? ? ? ? ? ? ? ?標(biāo)簽之間或標(biāo)簽包含的文本

? ? ? ? ? ? ? ? Comment:????????????????注釋

? ? ? ? ? ? ? ? DocumentFragment:文檔的片段

? ? ? ? 3.節(jié)點樹

? ? ? ? ? ? 一個文檔的所有節(jié)點,按照所在的層級,可以抽象成一種樹狀結(jié)構(gòu)。這種樹狀結(jié)構(gòu)就是 DOM 樹。它有一個頂層節(jié)點,下一層都是頂層節(jié)點的子節(jié)點,然后子節(jié)點又有自己的子節(jié)點,就這樣層層衍生出一個金字塔結(jié)構(gòu),倒過來就像一棵樹瀏覽器原生提供document節(jié)點,代表整個文檔。?除了根節(jié)點,其他節(jié)點都有三種層級關(guān)系:

? ? ? ? ? ? ? ? ? ? 父節(jié)點關(guān)系(parentNode):直接的那個上級節(jié)點

? ? ? ? ? ? ? ? ? ? 子節(jié)點關(guān)系(childNodes): 直接的下級節(jié)點

? ? ? ? ? ? ? ? ? ? 同級節(jié)點關(guān)系(sibling):? ? ?擁有同一個父節(jié)點的節(jié)點

? ? ? ? 4.document對象_方法/獲取元素

? ? ? ? ? ? ? ? a.getElementsByTagName()

????????該方法搜索 HTML 標(biāo)簽名,返回符合條件的元素。它的返回值是一個類似數(shù)組對象,可以實時反映 HTML 文檔的變化。如果沒有任何匹配的元素,就返回一個空集。如果傳入 * ,就可以返回文檔中所有 HTML 元素。

? ? ? ? ? ? ? ? b.getElementsByClassName()

????????該方法返回一個類似數(shù)組的對象,包括了所有 class 名字符合指定條件的元素,元素的變化實時反映在返回結(jié)果中。由于 class 是保留字,所以 JavaScript 一律使用 className 表示 CSS 的 class。

? ? ? ? ? ? ? ? c.getElementsByName()

????????該方法用于選擇擁有 name 屬性的 HTML 元素(比如 <form> 、 <radio> 、 <img> 等),返回一個類似數(shù)組的的對象( NodeList 實例),因為 name 屬性 ?相同的元素可能不止一個。

? ? ? ? ? ? ? ? d.getElementById()

????????該方法返回匹配指定 id 屬性的元素節(jié)點。如果沒有發(fā)現(xiàn)匹配的節(jié)點,則返回 null。注意,該方法的參數(shù)大小寫是敏感的。比如,如果某個節(jié)點的 id 屬性是 main ,那么? ? ? .getElementById('Main') 將返回 null。

? ? ? ? ? ? ? ? e.querySelector()

? ? ? ? ? ? ? ? ? ? 該方法接受一個 CSS 選擇器作為參數(shù),返回匹配該選擇器的元素節(jié)點。如果有多個節(jié)點?滿足匹配條件,則返回第一個匹配的節(jié)點。如果沒有發(fā)現(xiàn)匹配的節(jié)點,則返回 null。

? ? ? ? ? ? ? ? f.querySelectorAll()

? ? ? ? ? ? ? ? ? ? 該方法與 querySelector 用法類似,區(qū)別是返回一個NodeList 對象,包含所有匹配給定選擇器的節(jié)點。

? ? ? ? ? ? ? ? <p class="text">Hello</p>

? ? ? ? ? ? ? ? <form name="login"></form>

? ? ? ? ? ? ? ? <div id="root">哈哈哈</div>

? ? ? ? ? ? ? ? <div class="nav">nav1</div>

? ? ? ? ? ? ? ? <div class="nav">nav2</div>

? ? ? ? ? ? ? ? <script>

? ? ? ? ? ? ? ? ? ? ??// 獲得div標(biāo)簽數(shù)組的第一個div標(biāo)簽

? ? ? ? ? ? ? ? ? ? var div1 = document.getElementsByTagName("div")[0]

? ? ? ? ? ? ? ? ? ? div1.innerHTML = "Hello World"// 把獲得的標(biāo)簽的內(nèi)容寫成 Hello World

???????????????????????// 獲得class為text的標(biāo)簽數(shù)組的第一個標(biāo)簽

? ? ? ? ? ? ? ? ? ? var text = document.getElementsByClassName("text")[0];

? ? ? ? ? ? ? ? ? ? text.innerHTML = "Hello!"// 把獲得的標(biāo)簽內(nèi)容寫成 Hello!

? ? ? ? ? ? ? ? ? ? // 使用率極低

? ? ? ? ? ? ? ? ? ? var name = document.getElementsByName("login")

? ? ? ? ? ? ? ? ? ? console.log(name);

? ? ? ? ? ? ? ? ? ? var root = document.getElementById("root");// 獲得id為 root 的標(biāo)簽

? ? ? ? ? ? ? ? ? ? root.innerHTML = "呵呵呵"// 把該標(biāo)簽的內(nèi)容改為 呵呵呵

? ? ? ? ? ? ? ? ? ? var nav = document.querySelector(".nav");// 獲得class為nav的第一個標(biāo)簽

? ? ? ? ? ? ? ? ? ? console.log(nav);// 在控制臺輸出該標(biāo)簽

? ? ? ? ? ? ? ? ? // 獲得class為nav標(biāo)簽數(shù)組的第二個標(biāo)簽

? ? ? ? ? ? ? ? ? ? var navs = document.querySelectorAll(".nav")[1];

? ? ? ? ? ? ? ? ? ? console.log(navs); // 在控制臺輸出該標(biāo)簽 ?

? ? ? ? ? ? ? ? </script>

? ? ? ? 5.document對象_方法/創(chuàng)建元素

? ? ? ? ? ? ? ? a.document.createElement()

? ? ? ? ? ? ? ? ? ? 該方法用來生成元素節(jié)點,并返回該節(jié)點。

? ? ? ? ? ? ? ? b.document.createTextNode()

? ? ? ? ? ? ? ? ? ? 該方法用來生成文本節(jié)點(Text 實例),并返回該節(jié)點。它的參數(shù)是文本節(jié)點的內(nèi)容。

? ? ? ? ? ? ? ? c.document.createAttribute()

? ? ? ? ? ? ? ? ? ? 該方法生成一個新的屬性節(jié)點(Attr 實例),并返回它。

? ? ? ? ? ? ? ? var text = document.createElement("p");//創(chuàng)建一個p標(biāo)簽

? ? ? ? ? ? ? ? var content = document.createTextNode("我是文本")//創(chuàng)建一個文本

? ? ? ? ? ? ? ? var it = document.createAttribute("id")//創(chuàng)建一個id

? ? ? ? ? ? ? ? it.value = "root"//給id取名叫“root”

? ? ? ? ? ? ? ? text.appendChild(content);//往p標(biāo)簽里添加文本

? ? ? ? ? ? ? ? text.setAttributeNode(it);//往p標(biāo)簽里添加id

? ? ? ? ? ? ? ? console.log(text);//在控制臺輸出p標(biāo)簽

????????????????//獲得頁面id為container的div標(biāo)簽

? ? ? ? ? ? ? ? var container = document.getElementById("container");

? ? ? ? ? ? ? ? container.appendChild(text);//在div標(biāo)簽里放入p標(biāo)簽在頁面上顯示出來

? ? ? ? 6.Element對象_屬性

? ? ? ? ? ? Element對象對應(yīng)網(wǎng)頁的 HTML 元素。每一個 HTML 元素,在 DOM 樹上都會轉(zhuǎn)化成一個

Element節(jié)點對象(以下簡稱元素節(jié)點)。

? ? ? ? ? ? a.Element.id

? ? ? ? ? ? ? ? Element.id 屬性返回指定元素的 id 屬性,該屬性可讀寫

? ? ? ? ? ? ? ? // HTML 代碼為 <p id="foo">

? ? ? ? ? ? ? ? var p = document.querySelector('p');

? ? ? ? ? ? ? ? p.id // "foo"

? ? ? ? ? ? b.Element.className

? ? ? ? ? ? ? ? className 屬性用來讀寫當(dāng)前元素節(jié)點的 class 屬性。它的值是一個字符串,每個 class 之間用空格分割。

? ? ? ? ? ? c.Element.classList

? ? ? ? ? ? ? ? classList 對象有下列方法:

? ? ? ? ? ? ? ? ? ? add() :????????????????增加一個 class

? ? ? ? ? ? ? ? ? ? remove() :? ? ? ? ? 移除一個 class

? ? ? ? ? ? ? ? ? ? contains() :????????檢查當(dāng)前元素是否包含某個 class

? ? ? ? ? ? ? ? ? ? toggle() :? ? ? ? ? ? 將某個 class 移入或移出當(dāng)前元素

? ? ? ? ? ? ? ? var div = document.getElementById('myDiv');

? ? ? ? ? ? ? ? div.classList.add('myCssClass');

? ? ? ? ? ? ? ? div.classList.add('foo', 'bar');

? ? ? ? ? ? ? ? div.classList.remove('myCssClass');

? ? ? ? ? ? ? ? div.classList.contains('myCssClass'); // 返回true 或者 false

? ? ? ? ? ? ? ? div.classList.toggle('myCssClass'); // 如果myCssClass 不存在就加入,否則移除

? ? ? ? ? ? d.Element.innerHTML

? ? ? ? ? ? ? ? Element.innerHTML 屬性返回一個字符串,等同于該元素包含的所有HTML 代碼。該屬性可讀寫,常用來設(shè)置某個節(jié)點的內(nèi)容。它能改寫所有元素節(jié)點的內(nèi)容,包括 <HTML> 和 <body> 元素

? ? ? ? ? ? e.Element.innerText

? ? ? ? ? ? ? ? innerText 和 innerHTML 類似,不同的是 innerText 無法識別元素,會直接渲染成字符串

?7.Element獲取元素位置

? ? ? ? ? ? ? ? ? ? 屬性 ? ? ? ? ? ? ? ? ? ? ? ? ? ?描述

?clientHeight? ? ?獲取元素自身高度包括 padding 部分,但是不包括 border 、 margin

clientWidth? ? ? ?獲取元素自身寬度,同上

scrollHeight? ? ? 元素總高度,它包括 padding ,但是不包括 border 、 margin

? ? ? ? ? ? ? ? ? ? ? ? ?包括溢出的不可見內(nèi)容

scrollWidth? ? ? ?元素總寬度,同上(在實際中和clientWidth差不多)

scrollLeft ? ? ?????當(dāng)前水平滾動條距離左端的像素數(shù)量

scrollTop? ? ? ? ? 當(dāng)前垂直滾動條距離頂端的像素數(shù)量

offsetHeight? ? ?元素的 CSS 垂直高度(單位像素),包括元素本身的高度、

? ? ? ? ? ? ? ? ? ? ? ? ? padding 和 border

offsetWidth ? ? 元素的 CSS 水平寬度(單位像素),同上

offsetLeft? ? ? ?左邊到定位父級左邊界的間距,前提是父級有定位,否則往更上一級定位

offsetTop ? ? ? 上邊到定位父級上邊界的間距

? ? ? ? ? ? // 視口高度

? ? ? ? ? ? document.documentElement.clientHeight

? ? ? ? ? ? // 網(wǎng)頁總高度

? ? ? ? ? ? document.body.clientHeight

8.CSS操作

? ? ? ? ? ? a.setAttribute

? ? ? ? ? ? ? HTML 元素的 style 屬性操作 CSS 樣式最簡單的方法,就是使用網(wǎng)頁元素節(jié)點的setAttribute 方法直接操作網(wǎng)頁元素的 style 屬性

? ? ? ? ? ? ? div.setAttribute('style','background-color:red;' + 'border:1px solidblack;');

? ? ? ? ? ? b.元素節(jié)點的 style 屬性

? ? ? ? ? ? ? ? var divStyle = document.querySelector('div').style;

? ? ? ? ? ? ? ? divStyle.backgroundColor = 'red';

? ? ? ? ? ? ? ? divStyle.border = '1px solid black';

? ? ? ? ? ? ? ? divStyle.width = '100px';

? ? ? ? ? ? ? ? divStyle.height = '100px';

? ? ? ? ? ? ? ? divStyle.fontSize = '10em';

? ? ? ? ? ? c.cssText 屬性

? ? ? ? ? ? ? ? var divStyle = document.querySelector('div').style;

? ? ? ? ? ? ? ? divStyle.cssText = 'background-color: red;' ?+ 'border: 1px solid black;'?

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? + 'height: 100px;'?+ 'width: 100px;';

9.事件處理程序

? ? ? ? ? ? a.HTML事件處理

? ? ? ? ? ? ? ? <!DOCTYPE html>

? ? ? ? ? ? ? ? <html>

? ? ? ? ? ? ? ? ? ?<head lang="en">

? ? ? ? ? ? ? ? ? ? ? ? <meta charset="UTF-8">

? ? ? ? ? ? ? ? ? ? ? ? <title>Js事件詳解--事件處理</title>

? ? ? ? ? ? ? ? ? ?</head>

? ? ? ? ? ? ? ? ? ?<body>

? ? ? ? ? ? ? ? ? ? ? ?<div id="div">

? ? ? ? ? ? ? ? ? ? ? ? ? ?<button id="btn1" οnclick="demo()">按鈕</button>

? ? ? ? ? ? ? ? ? ? ? ?</div>

? ? ? ? ? ? ? ? ? ? ? ?<script>

? ? ? ? ? ? ? ? ? ? ? ? ? ?function demo(){

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?alert("hello html事件處理");

? ? ? ? ? ? ? ? ? ? ? ? ? }

? ? ? ? ? ? ? ? ? ? ? ?</script>

? ? ? ? ? ? ? ? ? ?</body>

? ? ? ? ? ? ? ? </html>

? ? ? ? ? ? b.DOM0級事件處理

? ? ? ? ? ? ? ? <body>

? ? ? ? ? ? ? ? ? ?<div id="div">

? ? ? ? ? ? ? ? ? ? ? ?<button id="btn1">按鈕</button>

? ? ? ? ? ? ? ? ? ?</div>

? ? ? ? ? ? ? ? ? ?<script>

? ? ? ? ? ? ? ? ? ? ? ? var btn1=document.getElementById("btn1");

? ? ? ? ? ? ? ? ? ? ? ? btn1.οnclick=function(){alert("Hello DOM0級事件處理程序1");}//被覆蓋掉

? ? ? ? ? ? ? ? ? ? ? ? btn1.οnclick=function(){alert("Hello DOM0級事件處理程序2");}

? ? ? ? ? ? ? ? ? ?</script>

? ? ? ? ? ? ? ? </body>

? ? ? ? ? ? c.DOM2級事件處理

? ? ? ? ? ? ? ? <body>

? ? ? ? ? ? ? ? ? ?<div id="div">

? ? ? ? ? ? ? ? ? ? ? ?<button id="btn1">按鈕</button>

? ? ? ? ? ? ? ? ? ?</div>

? ? ? ? ? ? ? ? ? ?<script>

? ? ? ? ? ? ? ? ? ? ? ?var btn1=document.getElementById("btn1");

? ? ? ? ? ? ? ? ? ? ?

? ? ? ? ? ? ? ? ? ? ? ? btn1.addEventListener("click",demo1);

? ? ? ? ? ? ? ? ? ? ? ? btn1.addEventListener("click",demo2);

? ? ? ? ? ? ? ? ? ? ? ? btn1.addEventListener("click",demo3);

? ? ? ? ? ? ? ? ? ? ? ? function demo1(){ alert("DOM2級事件處理程序1") }

? ? ? ? ? ? ? ? ? ? ? ? function demo2(){?alert("DOM2級事件處理程序2") }

? ? ? ? ? ? ? ? ? ? ? ? function demo3(){ alert("DOM2級事件處理程序3") }

? ? ? ? ? ? ? ? ? ? ?

? ? ? ? ? ? ? ? ? ? ? ? btn1.removeEventListener("click",demo2);

? ? ? ? ? ? ? ? ? ?</script>

? ? ? ? ? ? ? ? </body>

10.事件類型之鼠標(biāo)事件

? ? ? ? ? ? 鼠標(biāo)事件:鼠標(biāo)事件指與鼠標(biāo)相關(guān)的事件,具體的事件主要有以下一些

1 click: ? ? ? ????????按下鼠標(biāo)時觸發(fā)

2 dblclick: ? ????????在同一個元素上雙擊鼠標(biāo)時觸發(fā)

3 mousedown: ? 按下鼠標(biāo)鍵時觸發(fā)

4 mouseup:? ? ? ? 釋放按下的鼠標(biāo)鍵時觸發(fā)

5 mousemove: ? 當(dāng)鼠標(biāo)在節(jié)點內(nèi)部移動時觸發(fā)。當(dāng)鼠標(biāo)持續(xù)移動時,該事件會連觸發(fā)。

6 mouseenter:? ?鼠標(biāo)進(jìn)入一個節(jié)點時觸發(fā),進(jìn)入子節(jié)點不會觸發(fā)這個事件

7 mouseleave:? ?鼠標(biāo)離開一個節(jié)點時觸發(fā),離開父節(jié)點不會觸發(fā)這個事件

8 mouseover:? ? ?鼠標(biāo)進(jìn)入一個節(jié)點時觸發(fā),進(jìn)入子節(jié)點會再一次觸發(fā)這個事件

9 mouseout:? ? ? ?鼠標(biāo)離開一個節(jié)點時觸發(fā),離開父節(jié)點也會觸發(fā)這個事件

10 wheel:? ? ? ? ? ?滾動鼠標(biāo)的滾輪時觸發(fā)

? ? ? ? ? ? var btn1 = document.getElementById("btn1");

? ? ? ? ? ? btn1.onclick = function(){

? ? ? ? ? ? ? ?console.log("click事件");

? ? ? ? ? ? }

? ? ? ? ? ? 這些方法在使用的時候,除了DOM2級事件,都需要添加前綴 on.

11.Event事件對象

? ? ? ? ? ? 事件發(fā)生以后,會產(chǎn)生一個事件對象,作為參數(shù)傳給監(jiān)聽函數(shù)。

? ? ? ? ? ? a.Event對象屬性:

? ? ? ? ? ? ? ? 1 Event.Target

???????????????????????Event.target屬性返回事件當(dāng)前所在的節(jié)點

? ? ? ? ? ? ? ? ? ? // HTML代碼為

? ? ? ? ? ? ? ? ? ? // <p id="para">Hello</p>

? ? ? ? ? ? ? ? ? ? function setColor(e) {

? ? ? ? ? ? ? ? ? ? ? ?console.log(this === e.target);

? ? ? ? ? ? ? ? ? ? ? ?e.target.style.color = 'red';

? ? ? ? ? ? ? ? ? ? }

? ? ? ? ? ? ? ? ? ? para.addEventListener('click', setColor);

? ? ? ? ? ? ? ? 2 Event.type

? ? ? ? ? ? ? ? ? ? Event.type屬性返回一個字符串,表示事件類型。事件的類型是在生成事件的時候。該屬性只讀。 ?

? ? ? ? ? ? b.Event對象方法:

? ? ? ? ? ? ? 3?Event.preventDefault()

????????該方法取消瀏覽器對當(dāng)前事件的默認(rèn)行為。比如點擊鏈接后,瀏覽器默認(rèn)會跳轉(zhuǎn)到另一個頁面,使用這個方法以后,就不會跳轉(zhuǎn)了。

? ? ? ? ? ? ? ? ? ? btn.onclick = function(e){

? ? ? ? ? ? ? ? ? ? ? ?e.preventDefault(); // 阻止默認(rèn)事件

? ? ? ? ? ? ? ? ? ? ? ?console.log("點擊A標(biāo)簽");

? ? ? ? ? ? ? ? ? ? }

? ? ? ? ? ? ? ?4 Event.stopPropagation()

????????該方法阻止事件在 DOM 中繼續(xù)傳播,防止再觸發(fā),阻止事件冒泡。定義在別的節(jié)點上的監(jiān)聽函數(shù),但是不包括在當(dāng)前節(jié)點上其他的事件監(jiān)聽函數(shù)? 。

? ? ? ? ? ? ? ? ? ? btn.onclick = function(e){

? ? ? ? ? ? ? ? ? ? ? ?e.stopPropagation(); // 阻止事件冒泡

? ? ? ? ? ? ? ? ? ? ? ?console.log("btn");

? ? ? ? ? ? ? ? ? ? } ?

12.事件類型之鍵盤事件

1 keydown:按下鍵盤時觸發(fā)。

2 keypress:按下有值的鍵時觸發(fā),即按下 Ctrl、Alt、Shift、Meta 這樣無值的鍵,這個事件? ? ? ? ? ? ? ? ? ? ? ? 不會觸發(fā)。對于有值的鍵,按下時先觸發(fā)keydown事件,再觸發(fā)這個事件。

3 keyup:? ? ?松開鍵盤時觸發(fā)該事件? ? ? ? ? ? ? ? ? ?

?4 keyCode:? 唯一標(biāo)識// ?回車鍵值為13

? ? ? ? ? ? ? ?

????????????????username.onkeypress = function(e){

? ? ? ? ? ? ? ? ? ? ? ?console.log("keypress事件");

? ? ? ? ? ? ? ? ? ? }

????????????????var username = document.getElementById("username");

? ? ? ? ? ? ? ? username.onkeydown = function(e){// 按下回車鍵觸發(fā)的事件

? ? ? ? ? ? ? ? ? ?if(e.keyCode === 13){

? ? ? ? ? ? ? ? ? ? ? ?console.log("回車");

? ? ? ? ? ? ? ? ? }

? ? ? ? ? ? ? ? }

13.事件類型之表單事件

? ? ? ? ? ? 1 input事件

????????input事件當(dāng) <input>、<select>、<textarea> 的值發(fā)生變化時觸發(fā)。對于復(fù)選框( <input type=checkbox> )或單選框( <input type=radio> ),用戶改變選項時,也會觸發(fā)這個事件。input事件的一個特點,就是會連續(xù)觸發(fā),比如用戶每按下一次按鍵,就會觸發(fā)一次input事件。

? ? ? ? ? ? ? ? var username = document.getElementById("username");

? ? ? ? ? ? ? ? username.oninput = function(e){// 實時獲取當(dāng)前輸入框的內(nèi)容

? ? ? ? ? ? ? ? ? ?console.log(e.target.value);

? ? ? ? ? ? ? ? }

? ? ? ? ? ? 2 select事件

????????select事件當(dāng)在 <input>、<textarea> 里面選中文本時觸發(fā)

? ? ? ? ? ? ? ? // HTML 代碼如下

? ? ? ? ? ? ? ? // <input id="test" type="text" value="Select me!" />

? ? ? ? ? ? ? ? var elem = document.getElementById('test');

? ? ? ? ? ? ? ? elem.addEventListener('select',

? ? ? ? ? ? ? ? function (e) {

? ? ? ? ? ? ? ? ?console.log(e.type); // 該事件類型是"select"

? ? ? ? ? ? ? ? }, false);

? ? ? ? ? ? 3 Change事件

????????Change事件當(dāng) <input>、<select>、<textarea> 的值發(fā)生變化時觸發(fā)。?它與input事件的最大不同,就是不會連續(xù)觸發(fā),只有當(dāng)全部修改完成時才會觸發(fā)。

? ? ? ? ? ? ? ? var email = document.getElementById("email");

? ? ? ? ? ? ? ? email.onchange = function(e){

? ? ? ? ? ? ? ? ? ?console.log(e.target.value);//當(dāng)輸入完后獲取值

? ? ? ? ? ? ? ? }

? ? ? ? ? ? 4 reset事件

?????????發(fā)生在表單對象 <form> 上,reset事件當(dāng)表單重置(所有表單成員變回默認(rèn)值)時觸發(fā)。

? ? ? ? ? ? 5 submit事件

????????發(fā)生在表單對象 <form> 上,submit事件當(dāng)表單數(shù)據(jù)向服務(wù)器提交時觸發(fā)。

? ? ? ? ? ? ? ? <form id="myForm" οnsubmit="submitHandle">

? ? ? ? ? ? ? ? ? ?<button οnclick="resetHandle">重置數(shù)據(jù)

? ? ? ? ? ? ? ? </button>

? ? ? ? ? ? ? ? ? ?<button>提交</button>

? ? ? ? ? ? ? ? </form>

? ? ? ? ? ? ? ? var myForm = document.getElementById("myForm")

? ? ? ? ? ? ? ? function resetHandle(){

? ? ? ? ? ? ? ? ? ?myForm.reset();

? ? ? ? ? ? ? ? }

? ? ? ? ? ? ? ? function submitHandle(){

? ? ? ? ? ? ? ? ? ?console.log("提交");

? ? ? ? ? ? ? ? }

14.事件代理(事件委托)

? ? ? ? ? ? 由于事件會在冒泡階段向上傳播到父節(jié)點,因此可以把子節(jié)點的監(jiān)聽函數(shù)定義在父節(jié)點上,由父節(jié)點的監(jiān)聽函數(shù)統(tǒng)一處理多個子元素的事件。這種方法叫做事件的代理(delegation)。

? ? ? ? ? ? var ul = document.querySelector('ul');

? ? ? ? ? ? ul.addEventListener('click', function (event) {

? ? ? ? ? ? ? ? ?if (event.target.tagName.toLowerCase() ==='li') {

? ? ? ? ? ? ? ? ? ?// some code

? ? ? ? ? ? ? ? }

? ? ? ? ? ? });

15.定時器

? ? ? ? ? ? JavaScript 提供定時執(zhí)行代碼的功能,叫做定時器(timer),主要由 setTimeout() 和 setInterval()這兩個函數(shù)來完成。它們向任務(wù)隊列添加定時任務(wù)。

? ? ? ? ? ? 1 setTimeout ()

????????函數(shù)用來指定某個函數(shù)或某段代碼,在多少毫秒之后執(zhí)行。它返回一個整數(shù),表示定時器的編號,以后可以用來取消這個定時器。?setTimeout 函數(shù)接受兩個參數(shù),第一個參數(shù) func|code 是將要推遲執(zhí)行的。函數(shù)名或者一段代碼,第二個參數(shù) delay 是推遲執(zhí)行的毫秒數(shù)。

? ? ? ? ? ? ? ? var timerId = setTimeout(func|code, delay);

? ? ? ? ? ? ? ? setTimeout(function(){

? ? ? ? ? ? ? ? ? ? console.log("定時器")

? ? ? ? ? ? ? ? },1000)

? ? ? ? ? ? ? ? 溫馨提示:

????????還有一個需要注意的地方,如果回調(diào)函數(shù)是對象的方法,那么setTimeout 使得方法內(nèi)部的 this 關(guān)鍵字指向全局環(huán)境,而不是定義時所在的那個對象

? ? ? ? ? ? ? ? 定時器取消:

? ? ? ? ? ? ? ? ? ? var id = setTimeout(f, 1000);

? ? ? ? ? ? ? ? ? ? clearTimeout(id);

? ? ? ? ? ? 2 setInterval ()

????????函數(shù)的用法與 setTimeout 完全一致,區(qū)別僅僅在于 setInterval 指定某個任務(wù)每隔一段時間就執(zhí)行一次,也就是無限次的定時執(zhí)行。

? ? ? ? ? ? ? ? var timer = setInterval(function() {

? ? ? ? ? ? ? ? ?console.log(2);

? ? ? ? ? ? ? ? }, 1000)

? ? ? ? ? ? ? ? 通過setInterval方法實現(xiàn)網(wǎng)頁動畫 ? ? ? ? ? ? ? ?

? ? ? ? ? ? ? ? <!DOCTYPE html>

? ? ? ? ? ? ? ? <html lang="en">

? ? ? ? ? ? ? ? <head>

? ? ? ? ? ? ? ? ? ? <meta charset="UTF-8">

? ? ? ? ? ? ? ? ? ? <meta name="viewport" content="width=device-width, initial-scale=1.0">

? ? ? ? ? ? ? ? ? ? <title>Document</title>

? ? ? ? ? ? ? ? ? ? <style>

? ? ? ? ? ? ? ? ? ? ? ? #someDiv{

? ? ? ? ? ? ? ? ? ? ? ? ? ? width: 100px;

? ? ? ? ? ? ? ? ? ? ? ? ? ? height: 100px;

? ? ? ? ? ? ? ? ? ? ? ? ? ? background: red;

? ? ? ? ? ? ? ? ? ? ? ? ? ? ?}

? ? ? ? ? ? ? ? ? ?</style>

? ? ? ? ? ? ? ? </head>

? ? ? ? ? ? ? ? <body>

? ? ? ? ? ? ? ? ?<div id="someDiv"></div>

? ? ? ? ? ? ? ? ? ? <script>

? ? ? ? ? ? ? ? ? ? ? ? var div = document.getElementById('someDiv');

? ? ? ? ? ? ? ? ? ? ? ? var opacity = 1;

? ? ? ? ? ? ? ? ? ? ? ? var fader = setInterval(function() {

? ? ? ? ? ? ? ? ? ? ? ? ? ? opacity -= 0.05;

? ? ? ? ? ? ? ? ? ? ? ? ? ? ?if (opacity > 0) {

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?div.style.opacity = opacity;

? ? ? ? ? ? ? ? ? ? ? ? ? ? } else {

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?clearInterval(fader);

? ? ? ? ? ? ? ? ? ? ? ? ? ? }

? ? ? ? ? ? ? ? ? ? ? ? }, 30);

? ? ? ? ? ? ? ? ? ? </script>

? ? ? ? ? ? ? ? ? </body>

? ? ? ? ? ? ? ? ? </html>

16.防抖(debounce)

????????防抖嚴(yán)格算起來應(yīng)該屬于性能優(yōu)化的知識,但實際上遇到的頻率相當(dāng)高,處理不當(dāng)或者放任不管就容易引起瀏覽器卡死。

? 防抖定義:

? ? ? ? ? ? ? ? 對于短時間內(nèi)連續(xù)觸發(fā)的事件(上面的滾動事件),防抖的含義就是讓某個時間期限(如上面的1000毫秒)內(nèi),事件處理函數(shù)只執(zhí)行一次。

? ? ? ? ? ? 從滾動條監(jiān)聽的例子說起

? ? ? ? ? ? function showTop () {

? ? ? ? ? ? ? ? var scrollTop = document.documentElement.scrollTop;

? ? ? ? ? ? ? ? console.log('滾動條位置:' + scrollTop);

? ? ? ? ? ? }

? ? ? ? ? ? window.onscro = showTop

? ? ? ? ? ? function debounce(fn,delay){

? ? ? ? ? ? ??let timer = null //借助閉包

? ? ? ? ? ? ? return function() {

? ? ? ? ? ? ? ? if(timer){

? ? ? ? ? ? ? ? ? ?clearTimeout(timer)

? ? ? ? ? ? ? ? ?}

? ? ? ? ? ? ? timer = setTimeout(fn,delay) // 簡化寫法

? ? ? ? ? ? ? }

? ? ? ? ? ? }

17.節(jié)流(throttle)

????????如果在限定時間段內(nèi),不斷觸發(fā)滾動事件(比如某個用戶閑著無聊,按住滾動不斷的拖來拖去),只要不停止觸發(fā),理論上就永遠(yuǎn)不會輸出當(dāng)前距離頂部的距離。但是如果產(chǎn)品同學(xué)的期望處理方案是:即使用戶不斷拖動滾動條,也能在某個時間間隔之后給出反饋呢?

? ? ? ? ? ? function throttle(fn,delay){

? ? ? ? ?? ?let valid = true

? ? ? ? ?? ?return function() {

? ? ? ? ?? ? ? if(!valid){

? ? ? ? ?? ? ? ? ? //休息時間 暫不接客

? ? ? ? ?? ? ? ? ? return false

? ? ? ? ?? ? ? }

? ? ? ? ?? ? ? // 工作時間,執(zhí)行函數(shù)并且在間隔期內(nèi)把狀態(tài)位設(shè)為無效

? ? ? ? ?? ? ? ?valid = false

? ? ? ? ?? ? ? ?setTimeout(function(){

? ? ? ? ?? ? ? ? ? ?fn()

? ? ? ? ?? ? ? ? ? ?valid = true;

? ? ? ? ?? ? ? ?}, delay)

? ? ? ? ?? ? ? ?}

? ? ? ? ? ? }

? ? ? ?

? ? ? ? ? ? function showTop () {

? ? ? ? ? ? ? ?var scrollTop =

? ? ? ? ? ? ? ? document.documentElement.scrollTop;

? ? ? ? ? ? ? ?console.log('滾動條位置:' + scrollTop);

? ? ? ? ? ? }

? ? ? ? ? ? window.onscroll = throttle(showTop,300)

? ? ? ? ?使用場景:

? ? ? ? ? ? 1 搜索框input事件,例如要支持輸入實時搜索可以使用節(jié)流方案(間隔一段時間就必須查詢相關(guān)內(nèi)容),或者實現(xiàn)輸入間隔大于某個值(如500ms),就當(dāng)做用戶輸入完成,然后開始搜索,具體使用哪種方案要看業(yè)務(wù)需求。

? ? ? ? ? ? 2 頁面resize事件,常見于需要做頁面適配的時候。需要根據(jù)最終呈現(xiàn)的頁面情況進(jìn)行dom渲染(這種情形一般是使用防抖,因為只需要判斷最后一次的變化情況)。


十三、總結(jié)

????????這個筆記內(nèi)容中的“重點”和“輕點”是我根據(jù)自己的學(xué)習(xí)狀況和理解來的,有什么不足還請多多包涵~

總結(jié)

以上是生活随笔為你收集整理的前端JavaScript学习小总结的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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