javascript
JS每日笔记
js 簡(jiǎn)介
JS是什么
- JS是一種運(yùn)行在客戶端的腳本語(yǔ)言,最早是在HTML(標(biāo)準(zhǔn)通用標(biāo)記語(yǔ)言下的一個(gè)應(yīng)用)網(wǎng)頁(yè)上使用,用來(lái)給HTML網(wǎng)頁(yè)增加動(dòng)態(tài)功能
- 瀏覽器就是一種運(yùn)行JS腳本語(yǔ)言的客戶端,JS的解釋器被稱為JS引擎,為瀏覽器的一部分
JS 的組成
- JavaScript 是由 ECMAScript,DOM 和 BOM 三者組成的。
- ECMAScript: 定義了JavaScript 的語(yǔ)法規(guī)范,描述了語(yǔ)言的基本語(yǔ)法和數(shù)據(jù)類型
- DOM (Document Object Model): 文檔對(duì)象模型
- BOM (Browser Object Model): 瀏覽器對(duì)象模型
js 的三種書寫方式
- 行內(nèi)式(強(qiáng)烈不推薦)
? ? =>a 標(biāo)簽
? ? =>書寫在 href 屬性上,一定要書寫一個(gè) javascript;一段js 代碼;
=>非a標(biāo)簽
? ?-> 書寫一個(gè)行為屬性,例如:onclick(當(dāng)點(diǎn)擊在標(biāo)簽身上的時(shí)候)
? ?->直接在屬性值的位置書寫 js 代碼即可?
- 內(nèi)嵌式(不太推薦)
- 外鏈?zhǔn)?#xff08;推薦)
? ? ? =>把 js 代碼書寫在一個(gè) .js后綴的文件內(nèi),在當(dāng)前 html 文件內(nèi)以 script 標(biāo)簽的script 標(biāo)簽的 src 屬性引入頁(yè)面
? ? ? =>注意: 1.script 標(biāo)簽引入的 js 文件會(huì)直接執(zhí)行,不需要依賴行為
?2.script 標(biāo)簽書寫在 body 的末尾或者 head 的末尾
?3.一個(gè)標(biāo)簽被當(dāng)作外鏈?zhǔn)揭雑s文件后 ,就不能被當(dāng)作 內(nèi)嵌式使用了
js 定義變量
?什么是變量?
?變量是計(jì)算機(jī)內(nèi)存中存儲(chǔ)數(shù)據(jù)的標(biāo)識(shí)符,根據(jù)變量名稱可以獲取到內(nèi)存中存儲(chǔ)的數(shù)據(jù);
?變量其實(shí)就相當(dāng)于一個(gè)容器,內(nèi)部可以存儲(chǔ)任意類型的數(shù)據(jù),使用變量時(shí),用的是內(nèi)部存儲(chǔ)的數(shù)據(jù)。
為什么要定義變量?
使用變量可以方便的獲取或者修改內(nèi)存中的數(shù)據(jù)
如何定義變量
使用一個(gè) var 的關(guān)鍵字進(jìn)行定義,后面必須加一個(gè)空格,空格后面自定義變量名
var a; var b; var c;變量賦值
- 變量定義之后,初始時(shí)沒有進(jìn)行賦值,內(nèi)部有一個(gè)默認(rèn)存儲(chǔ)的值叫 undefined(未定義) 表示內(nèi)部未賦值,但可以存儲(chǔ)數(shù)據(jù)了
- 變量賦值的方式:通過等號(hào) = 賦值,等號(hào)右邊的值賦值給左邊的變量 ==(等號(hào)在 JS 中叫做 賦值號(hào);書寫時(shí),等號(hào) = 兩側(cè)習(xí)慣書寫一個(gè)空格)==
使用變量
直接寫變量名即可使用變量;變量在使用前,必須先有定義,如果沒有定義,會(huì)出現(xiàn)引用錯(cuò)誤
變量命名規(guī)則(必須遵守,不遵守會(huì)報(bào)錯(cuò))
- 由字母、數(shù)字、下劃線、$符號(hào)組成,不能以數(shù)字開頭
- 字母區(qū)分大小寫
- 不能是關(guān)鍵字和保留字
- 關(guān)鍵字指的是js中有特殊功能的小詞語(yǔ),比如var、for等
- 保留字指的是現(xiàn)在沒有特殊功能,但是將來(lái)新語(yǔ)法中有可能作為關(guān)鍵字使用
變量命名規(guī)范(建議遵守的,不遵守不會(huì)報(bào)錯(cuò))
- 變量名必須有意義
- 遵守駝峰命名法
js 數(shù)據(jù)類型
JS中的值,無(wú)論是字面量還是變量,都有明確的類型
- 數(shù)據(jù)類型分類(以基本數(shù)據(jù)類型為主)
- Number 數(shù)字類型
- 不區(qū)分整數(shù)、浮點(diǎn)數(shù)、特殊值,都是 Number 類型
- String 字符串類型
- 所有的字符串都是 String 類型
- undefined undefined類型
- ndefined本身就是一個(gè)數(shù)據(jù),表示未定義,變量只聲明不賦值的時(shí)候,值默認(rèn)是 undefined
- Boolean 布爾類型
- Boolean 字面量:只有 true 和 false 兩個(gè)字面量的值,必須是小寫字母
- 計(jì)算機(jī)內(nèi)部存儲(chǔ):true 為 1,false 為 0
- null null類型
- null 本身就是一個(gè)數(shù)據(jù)
- 從邏輯角度,null 值表示一個(gè)空對(duì)象指針
- 如果定義的變量準(zhǔn)備在將來(lái)用于保存對(duì)象,最好該變量初始化為 null
- Object 對(duì)象類型(后續(xù)課程詳細(xì)講解)
- Number 數(shù)字類型
數(shù)據(jù)類型檢測(cè)
- 為什么要有數(shù)據(jù)類型檢測(cè)?
- JS語(yǔ)言是一門動(dòng)態(tài)類型的語(yǔ)言,變量并沒有一個(gè)單獨(dú)的數(shù)據(jù)類型,而是會(huì)隨著內(nèi)部存儲(chǔ)數(shù)據(jù)的變化,數(shù)據(jù)類型也會(huì)發(fā)生變化
- 變量的數(shù)據(jù)類型,與內(nèi)部存儲(chǔ)數(shù)據(jù)有關(guān)
- 將來(lái)使用變量時(shí),需要知道內(nèi)部存儲(chǔ)的數(shù)據(jù)是什么類型,避免程序出錯(cuò)
- 使用 typeof 的方法進(jìn)行數(shù)據(jù)檢測(cè)
- 檢測(cè)方式:在 typeof 后面加小括號(hào)執(zhí)行,將要檢測(cè)的數(shù)據(jù)放在小括號(hào)內(nèi)部
數(shù)據(jù)類型轉(zhuǎn)換(轉(zhuǎn)數(shù)值 / 轉(zhuǎn)字符串 / 轉(zhuǎn)布爾)
轉(zhuǎn)數(shù)值
- 轉(zhuǎn)型函數(shù)Number()可以用于任何數(shù)據(jù)類型,將其他數(shù)據(jù)類型轉(zhuǎn)為數(shù)字
- 字符串:純數(shù)字字符串轉(zhuǎn)為對(duì)應(yīng)數(shù)字,空字符串和空白字符串轉(zhuǎn)為0,非空非純數(shù)字字符串轉(zhuǎn)為NaN
- 布爾值:true轉(zhuǎn)為1,false轉(zhuǎn)為0
- undefined:轉(zhuǎn)為NaN
- null:轉(zhuǎn)為0
- 對(duì)浮點(diǎn)數(shù)進(jìn)行取整操作
- 對(duì)數(shù)字取整直接舍棄小數(shù)部分,只保留整數(shù)
- 將字符串轉(zhuǎn)為整數(shù)數(shù)字
- 將字符串轉(zhuǎn)為整數(shù)數(shù)字,也包含取整功能
- 字符串中,必須是純數(shù)字字符串或者數(shù)字字符開頭的字符串,才能轉(zhuǎn)換為正常數(shù)字,且只取整數(shù)部分
- 如果不是數(shù)字打頭的字符串,會(huì)轉(zhuǎn)換為NaN
- 將字符串轉(zhuǎn)為浮點(diǎn)數(shù)數(shù)字
- 滿足浮點(diǎn)數(shù)數(shù)字字符必須在字符串開始,如果不在開始返回值都是NaN
轉(zhuǎn)字符串
- num + “” ,當(dāng) + 兩邊一個(gè)操作符是字符串類型,一個(gè)操作符是其他類型的時(shí)候,會(huì)先把其他類型轉(zhuǎn)換成字符串在進(jìn)行字符串拼接,返回字符串
轉(zhuǎn)布爾
- 轉(zhuǎn)型函數(shù)Boolean()可以用于任何數(shù)據(jù)類型,將其他數(shù)據(jù)類型轉(zhuǎn)為布爾類型的值
- 轉(zhuǎn)為false:NaN、0、“”空字符串、null、undefined
- 轉(zhuǎn)為true:非0 非NaN數(shù)字、非空字符串
js 運(yùn)算符
- 什么是運(yùn)算符?
- 也叫操作符,是 JS 中發(fā)起運(yùn)算最簡(jiǎn)單的方式,例如: 5 + 6
- 表達(dá)式的組成包含操作數(shù)和操作符,表達(dá)式會(huì)得到一個(gè)結(jié)果,然后用結(jié)果參與程序
JS 運(yùn)算符分類
- 算數(shù)運(yùn)算符(?+?/?-?/?*?/?/?/?%?)
- 運(yùn)算順序與數(shù)學(xué)中的運(yùn)算順序一致,先乘除取余,后加減,有小括號(hào)先算小括號(hào)
- 賦值運(yùn)算符(?=?/?+=?/?-=?/?*=?/?/=?/?%=?)
- 比較運(yùn)算符(?>?/?<?/?>=?/?<=?/?==?/?===?/?!=?/?!==?)
- 比較結(jié)果只會(huì)返回一個(gè)布爾類型值,true 或者 false
- 邏輯運(yùn)算符(?&&?/?||?/?!?)
- 自增自減運(yùn)算符(?++?/?--?)
運(yùn)算符優(yōu)先級(jí)從高到低
- 自增自減運(yùn)算符++ -- !
- 算術(shù)運(yùn)算符 先* / % 后+ -
- 比較運(yùn)算符中的 > >= < <=
- 比較運(yùn)算符中的 == != === !==
- 邏輯運(yùn)算符 先&& 后||
- 賦值運(yùn)算符
JS分支語(yǔ)句
- JS 代碼是從上往下按照順序依次執(zhí)行的, 從第一行代碼一直執(zhí)行到最后一行
- 如果有一種情況是我有兩段代碼, 我只需要執(zhí)行其中一個(gè)即可, 那么就可以用到分支語(yǔ)句
- 簡(jiǎn)單來(lái)說: 分支語(yǔ)句就是根據(jù)我們?cè)O(shè)定好的條件來(lái)決定要不要執(zhí)行某些代碼
if 分支語(yǔ)句
- if 分支語(yǔ)句的基本書寫
- 語(yǔ)法:?if (條件) { 想要執(zhí)行的代碼 }
- if ... else 語(yǔ)句的基本書寫
- 語(yǔ)法:?if (條件) { 條件為真時(shí) 執(zhí)行的代碼 } else { 條件為假時(shí) 執(zhí)行的代碼 }
- if 嵌套語(yǔ)句的基本書寫
- 可以通過?if?和?else if?來(lái)設(shè)置多個(gè)條件進(jìn)行判斷
- 語(yǔ)法:?if(條件1){條件1為true時(shí)執(zhí)行} else if (條件2){條件2為true時(shí)執(zhí)行}
- 會(huì)從頭開始依次判斷條件
- 如果第一個(gè)條件為 true 了, 那么就會(huì)執(zhí)行后面的 {} 的內(nèi)容
- 如果第一個(gè)條件為 false, 那么就會(huì)判斷第二個(gè)條件
- 如果第二個(gè)條件也為 false, 那么會(huì)依次往后執(zhí)行
- 注意
- 多個(gè) {} 只會(huì)有一個(gè)被執(zhí)行, 一旦有一個(gè)條件為 true 了, 后面的就不再判斷了
- 如果所有的 條件都為 false, 那么會(huì)執(zhí)行最后的 else {} 分支
- 如果所有的條件都為 false, 且沒有最后的 else {} 分支, 那么當(dāng)前 if 分支不會(huì)有任何代碼段會(huì)被執(zhí)行
switch 分支語(yǔ)句
- switch 也是 條件判斷語(yǔ)句的一種, 是對(duì)于某一個(gè)變量的判斷(三個(gè)等于號(hào)全等的判斷,數(shù)據(jù)類型不一致時(shí)會(huì)導(dǎo)致判斷失敗)
- switch 分支語(yǔ)句的基本書寫
- switch 通常是判斷某一個(gè)變量等于某一個(gè)值的時(shí)候使用, 比如用戶輸入一個(gè)數(shù)字顯示今天周幾, 輸入一個(gè)數(shù)字顯示今天是幾月
- switch 穿透語(yǔ)句的基本書寫
-
從第一個(gè)滿足條件的 case 開始
-
如果沒有 break, 一直執(zhí)行代碼直到遇到一個(gè) break 或者 switch 結(jié)束
-
三元表達(dá)式
- 三元表達(dá)式(三元運(yùn)算/三目運(yùn)算/三目/問號(hào)冒號(hào)表達(dá)式)
- 語(yǔ)法: 條件 ? 條件正確時(shí)執(zhí)行的代碼 :條件不正確時(shí)執(zhí)行的代碼
// 給變量賦值 var num = 1 // 我們暫且規(guī)定 num == 1 時(shí)代表為男性,
num == 2 時(shí)代表為女性
var gender = num == 1 ? '男' : '女' console.log(gender)
# 循環(huán)語(yǔ)句
- 什么是循環(huán)語(yǔ)句
- 根據(jù)某些給出的條件,重復(fù)執(zhí)行同一段代碼
- 循環(huán)必須要有某些固定的內(nèi)容組成
- 初始化
- 條件判斷
- 要執(zhí)行的代碼
- 自身改變
while 循環(huán)語(yǔ)句
- while,中文叫 當(dāng)…時(shí),其實(shí)就是當(dāng)條件滿足時(shí)就執(zhí)行代碼,一旦不滿足了就不執(zhí)行了
- 語(yǔ)法?while (條件) { 滿足條件就會(huì)執(zhí)行 }
- 因?yàn)闈M足條件就執(zhí)行, 所以我們寫的時(shí)候一定要注意, 就是設(shè)定一個(gè)邊界值, 不然就一直循環(huán)下去了, 簡(jiǎn)稱: 死循環(huán), 電腦卡死的時(shí)間根據(jù)電腦性能有所不同, 建議不要嘗試
do...while 循環(huán)語(yǔ)句
- 是一個(gè)和 while 循環(huán)類似的循環(huán)
- while 會(huì)先進(jìn)行條件判斷, 滿足就執(zhí)行, 不滿足就直接不執(zhí)行了
- do...while 的循環(huán)是 先不管條件, 先執(zhí)行一次, 然后再開始進(jìn)行條件判斷
- 語(yǔ)法:?do { 要執(zhí)行的代碼 } while (條件)
for 循環(huán)語(yǔ)句
- 和 while do while 循環(huán)都不太一樣的一種循環(huán)結(jié)構(gòu)
- 但道理是和其他兩種一樣的, 都是循環(huán)執(zhí)行代碼的
- 語(yǔ)法:?for (var i = 0; i < 10; i++) { 要執(zhí)行的代碼 }
流程控制語(yǔ)句
- break 關(guān)鍵字的應(yīng)用
- 在循環(huán)沒有進(jìn)行完畢的時(shí)候, 因?yàn)槲以O(shè)置的條件滿足了, 就直接提前終止循環(huán)
- 舉個(gè)例子: 我要吃五個(gè)包子, 我吃了三個(gè)了, 這時(shí)候吃飽了吃不下去了, 我就停止了繼續(xù)吃包子這件事
- 那么此時(shí)要停止循環(huán), 就可以直接使用 break 關(guān)鍵字
- continue 關(guān)鍵字的應(yīng)用
- 在循環(huán)中, 把循環(huán)的本次跳過去, 繼續(xù)執(zhí)行后續(xù)的循環(huán)
- 舉個(gè)例子: 還是吃五個(gè)包子, 要吃第三個(gè)的時(shí)候, 第三個(gè)掉地上了, 所以就不吃第三個(gè)了, 繼續(xù)吃第四個(gè)和第五個(gè)
- 跳過本次循環(huán), 就可以使用 continue 關(guān)鍵字
循環(huán)嵌套的書寫
- 循環(huán)嵌套其實(shí)就是一個(gè)循環(huán)內(nèi)部又寫了一個(gè)循環(huán)
函數(shù)
- 什么是函數(shù)?
- 在 JS 中,函數(shù)可以理解為將一段在程序中多次出現(xiàn)的代碼封裝起來(lái)的盒子,以便在多個(gè)地方調(diào)用執(zhí)行
- 換句話說:函數(shù)就是一個(gè)內(nèi)部封裝了部分代碼的盒子,可以在多個(gè)位置被調(diào)用
- 函數(shù)的使用
- 創(chuàng)建函數(shù)(定義函數(shù))
- 調(diào)用函數(shù)
函數(shù)的定義
- 聲明式定義
- 賦值式定義
函數(shù)的調(diào)用
function fn1() {} var fn2 = function () {}fn1() fn2() 復(fù)制代碼聲明式與賦值式的區(qū)別
- 書寫區(qū)別
- 調(diào)用區(qū)別(賦值式只可以在定義后調(diào)用,聲明式定義前后都可以)
函數(shù)的參數(shù)
- 函數(shù)的參數(shù)有形參和實(shí)參(他們是從左到右的順序一一對(duì)應(yīng)的)
- 形參:在函數(shù)聲明時(shí) function 后邊的()內(nèi)書寫,每寫一個(gè)參數(shù),就相當(dāng)于在函數(shù)內(nèi)部創(chuàng)建一個(gè)變量,其值為函數(shù)調(diào)用時(shí)傳遞的值,只能在函數(shù)內(nèi)部使用,不能在外部使用
- 實(shí)參:顧名思義,實(shí)際的參數(shù),也就是函數(shù)在調(diào)用時(shí)傳遞的參數(shù)
- 傳參的多與少
函數(shù)的返回值
- 返回值是什么?有什么作用
- 函數(shù)內(nèi)部默認(rèn)有一個(gè) return 他的值就是函數(shù)的返回值,如果函數(shù)內(nèi)部不寫 return 那么函數(shù)默認(rèn)在函數(shù)體內(nèi)部最底部返回一個(gè) undefined
- 如果不想返回 undefined 需要手動(dòng)在函數(shù)內(nèi)部寫上 return 并且跟上需要返回的值
- 可以中斷函數(shù)(返回1 2 3return后面的代碼會(huì)終止)
函數(shù)的預(yù)解析
- 什么是預(yù)解析
- 在代碼運(yùn)行前,先全部分析一遍代碼,這個(gè)行為叫做預(yù)解析(預(yù)解釋)
- 預(yù)解析的內(nèi)容
- 聲明式函數(shù)定義
- var 聲明變量
??作用域(就是變量可以起作用的范圍)
- ? ? ? ? ?作用域分為兩個(gè)
- ? ? ? ? 1.全局作用域(直接在script 標(biāo)簽內(nèi)部書寫的代碼)
? ? ? ? 在此作用域創(chuàng)建的變量,我們叫做全局變量,在當(dāng)前 script 標(biāo)簽內(nèi)的哪里都能使用
? ? ? ? ?在 JS中,全局作用域中有一個(gè) ?提前給我們準(zhǔn)備好的 對(duì)象(一種數(shù)據(jù)格式,)
? ? ? ? ?這個(gè)對(duì)象叫做window
? ? ? ? ?我們創(chuàng)建的全局變量,只能在當(dāng)前作用域中使用,超出這個(gè)作用域(也就是在函數(shù)外邊)去使用, 就會(huì)找不到變量
? ? ? ? ?
?作用域鏈
- ? ? ? ? ?作用域鏈就是在訪問一個(gè)變量的時(shí)候, 如果當(dāng)前作用域內(nèi)沒有
- ? ? ? ? ?會(huì)去自己的父級(jí)作用域, 也就是上一層作用域內(nèi)查找, 如果找到就直接使用, 如果沒有找到繼續(xù)向上層查找
- ? ? ? ? ?直到查找到 最頂層的全局作用域, 如果找到了直接使用, 如果沒找到 報(bào)錯(cuò)提示變量不存在(未定義)
- ? ? ? ? ?我們將這個(gè)一層一層向上查找的規(guī)律, 叫做作用域鏈
遞歸函數(shù)(還是一個(gè)函數(shù),在函數(shù)內(nèi)部調(diào)用和使用自身)
? ? 和循環(huán)差不多
?
?對(duì)象
對(duì)象是JS中的一種數(shù)據(jù)格式,對(duì)象在 JS 中的數(shù)據(jù)類型數(shù)據(jù)為: 引用數(shù)據(jù)類型(復(fù)雜數(shù)據(jù)類型)<br>
? ? ? ? 鍵值對(duì) -> key: value
? ? ? 如果對(duì)象內(nèi)部有多個(gè) 鍵值對(duì), 那么需要使用 逗號(hào) 間隔 <br> ?
? ? ??
? ? ? ? 語(yǔ)法1: var obj = {鍵值對(duì)}
? ? ? ? ?
創(chuàng)建對(duì)象
? ? ?創(chuàng)建對(duì)象 ? 分為兩種方式:
? ? ? ? ? 1.字面量的形式(使用頻率比較高)
? ? ? ? ? 語(yǔ)法;var obj={鍵值對(duì)}
? ? ? ? ? 2.內(nèi)部構(gòu)造函數(shù)的創(chuàng)建
? ? ? ? ? ? ? ? 語(yǔ)法1: var obj1=new Object()//創(chuàng)建空對(duì)象
? ? ? ? ? ? ? ? 語(yǔ)法2: ?var obj2=new ?Object({a : 1, b : 2}) //創(chuàng)建一個(gè)具有屬性或者說具有鍵值對(duì)的 對(duì)象
? ? ? ? ? ? ?
? ? ? ?
??
對(duì)象的操作 (增刪改查)
?
?一般大部分情況下,點(diǎn)語(yǔ)法與中括號(hào)語(yǔ)法,作用相同,怎么選擇都可以
? ? ? ? 特殊情況下我們需要中括號(hào)語(yǔ)法
? ? ? ? ?1.對(duì)象的屬性名,有純數(shù)字或者特殊符號(hào)(100,'!','@'),這個(gè)時(shí)候,就只能使用中括號(hào)語(yǔ)法
? ? ? ? ?2.如果涉及變量相關(guān)的時(shí)候,也需要中括號(hào)語(yǔ)法
? ?
? ? ?
?for...in 循環(huán)遍歷對(duì)象
? ? ? ? ? 語(yǔ)法: for (var i in 要遍歷的對(duì)象) { 循環(huán)要執(zhí)行的代碼 }
? ? ? ? ? '遍歷對(duì)象' 想辦法拿到對(duì)象內(nèi)部所有的 屬性名與屬性值? ? ? ?
?
? ??
?創(chuàng)建數(shù)組的方法
? ?分兩種方式
? ? ? ? ? 1.字面量方式
? ? ? ? ? ?語(yǔ)法:var arr =[1, 2, 3, 'qwe', true]
? ? ? ? ? 2.構(gòu)造函數(shù)的方式
? ? ? ? ? ?語(yǔ)法1:var arr = new Array() ?創(chuàng)建一個(gè)空對(duì)象
? ? ? ? ? ?語(yǔ)法2:var arr = new Array(5)創(chuàng)建一個(gè)有長(zhǎng)度的數(shù)組
? ? ? ? ? ?語(yǔ)法3; ? var arr = new Array(1,2,3)創(chuàng)建一個(gè)有內(nèi)容的數(shù)組?
? ? ?
? ? ? ?
? ? ? ??
? ? ? ??
? 數(shù)組的length 屬性
? ? ? ? ? length翻譯過來(lái)就是長(zhǎng)度的意思
? ? ? ? ? ? ? ?代表這個(gè)數(shù)組內(nèi),有多少個(gè)成員
? ? ? ? ? ? ? 語(yǔ)法: ? 數(shù)組名.length
? ?
? ? ? ??
??
?數(shù)組的索引(下標(biāo))
? ? ? ? 就是指一個(gè)數(shù)據(jù),在這個(gè)數(shù)組內(nèi)排列在第幾個(gè) ?位置上
? ? ? ? 注意: ?在JS 中,索引(下標(biāo))是從0開始計(jì)如果想要獲取到數(shù)組指定位置的值,可以通過下標(biāo)來(lái)獲取
? ? ? ? 語(yǔ)法:數(shù)組名[下標(biāo)] --> 能夠獲取到這個(gè)數(shù)組中對(duì)應(yīng)下標(biāo)的成員具體的值
? ?
? ??遍歷數(shù)組
? ? ? ? ? 想辦法 ?拿到 ?數(shù)組每一個(gè)成員
? ? ? ? ? 想拿到數(shù)組的所有成員,需要先想辦法拿到數(shù)組所有的下標(biāo)
? ? ? ? ? 規(guī)律: ?所有數(shù)組的下標(biāo)都是從0開始的, ?然后 到 ?數(shù)組 .length - 1 結(jié)束
? ? ? ??
? ? ?
? ? ? ??
?冒泡排序:
? ? ?屬于數(shù)組排序的算法之一(通過一種算法將一個(gè)亂序的數(shù)組,調(diào)整為指定的排序的數(shù)組,從大到小或者從小到大)
選擇排序:
? ? 原理 首先從原始數(shù)組中找到最小的元素,并把該元素放在數(shù)組的最前面,然后再?gòu)氖O碌脑刂袑ふ易钚〉脑?#xff0c;放在之前最小元素的后面,直到排序完畢。
數(shù)據(jù)類型之間的區(qū)別(分為兩種)
?1.基本數(shù)據(jù)類型(簡(jiǎn)單數(shù)據(jù)類型)
?2. 引用數(shù)據(jù)類型(復(fù)雜數(shù)據(jù)類型)
##### 1. 存儲(chǔ)
? ? ? ? ? ?變量的數(shù)據(jù)存儲(chǔ)的地方是 內(nèi)存中, 內(nèi)存分為兩個(gè) 棧內(nèi)存, 堆內(nèi)存
? ? ? ? ? ? 基本數(shù)據(jù)類型:存儲(chǔ)在 棧內(nèi)存中, 比如: string number undefined null ?boolean
? ? ? ? ? ? 復(fù)雜數(shù)據(jù)類型: 將數(shù)據(jù)本體存放在堆內(nèi)存中, 比如對(duì)象或者數(shù)組或者函數(shù)
? ? ? ? ? ? 然后將指向該內(nèi)存的地址, 存放在數(shù)組名或者對(duì)象名或者函數(shù)名中
? ? ? ? ? ? 數(shù)組/對(duì)象/函數(shù) ?名 ?存放在 棧內(nèi)存中
? 面試題: 數(shù)據(jù)類型之間有什么區(qū)別?
? ? ? ? ? 基本數(shù)據(jù)類型有哪些, 然后他們存儲(chǔ)的地方是 棧內(nèi)存中
? ? ? ? ? 引用數(shù)據(jù)類型有哪些, 然后他們數(shù)據(jù)本體存放的地方是 堆內(nèi)存中, 然后變量名存儲(chǔ)的位置是 棧內(nèi)存中
? ? ? ? ? 基本數(shù)據(jù)類型內(nèi)部存儲(chǔ)的是值; 引用數(shù)據(jù)類型內(nèi)部存儲(chǔ)的是地址
? ? ? ? ?
##### 2. 賦值
? ? ? ? ? ? ? ? ? ? 基本數(shù)據(jù)類型: 賦值以后, 兩個(gè)變量之間沒有任何關(guān)系, 相當(dāng)于將我自己的某一個(gè)東西, 復(fù)制一份給你, 然后你的就是你的, 我的就是我的(你的和我的之間沒有任何關(guān)系) ? ? ? ? ?
? ? ? ? ? ? ? ? ??
? ? ? ? ? ? ? ? ? ? 復(fù)雜數(shù)據(jù)類型: 因?yàn)樽兞績(jī)?nèi)部存儲(chǔ)的是指向堆內(nèi)存的地址, 所以在賦值的時(shí)候, 其實(shí)是將 這個(gè)地址給到了另外一個(gè)變量(兩個(gè)地址一樣是你的也是我的)
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 那么相當(dāng)于這兩個(gè)變量存儲(chǔ)的是 ?同一個(gè) 鑰匙, 所以操作其中一個(gè)變量的時(shí)候, 會(huì)影響另外一個(gè)變量
##### 3. 比較
? ? ? ? ? ? ? ? ? ? 基本數(shù)據(jù)類型: 就是 值 的比較
? ? ? ? ? ? ? ? ? ? 引用數(shù)據(jù)類型: 比較的時(shí)候 比較的是 存儲(chǔ)地址
##### 4. 傳參
? ? ? ? ? ? ? ? ? ? 基本數(shù)據(jù)類型: 將值拷貝一份傳遞給形參, 在函數(shù)內(nèi)修改不會(huì)影響外界
? ? ? ? ? ? ? ? ? ? 引用數(shù)據(jù)類型: 將存儲(chǔ)地址賦值給形參, 在函數(shù)內(nèi)修改會(huì)影響外界
? ? ? ? ? ? ? ? ?
數(shù)組的常用方法
? 1、push?
? ? ? ?語(yǔ)法:數(shù)組.push(數(shù)據(jù))
? ? ? ?作用:向數(shù)組末尾添加數(shù)據(jù)
? ? ? ?返回值:追加數(shù)據(jù)后,數(shù)組最新長(zhǎng)度(length)
? 2.pop
? ? ? ?語(yǔ)法:數(shù)組.pop()
? ? ? ?作用:刪除數(shù)組最后一條數(shù)據(jù)
? ? ? ?返回值:被刪除的數(shù)據(jù)
? 3.unshift
? ? ? ?語(yǔ)法:數(shù)組.unshift(數(shù)據(jù))
? ? ? ?作用:像數(shù)組開頭添加數(shù)據(jù)
? ? ? ?返回值:添加數(shù)組后,數(shù)組最新長(zhǎng)度(length)
? 4.shift ?
? ? ? ?語(yǔ)法:數(shù)組.shift()
? ? ? ?作用:刪除數(shù)組開頭數(shù)據(jù)
? ? ? ?返回值:被刪除的數(shù)據(jù)
?5.reverse
? ? ? ?語(yǔ)法:數(shù)組.reverse()
? ? ? ?作用:反轉(zhuǎn)數(shù)組
? ? ? ?返回值:反轉(zhuǎn)后的數(shù)組
?6.sort
? ? ? ? 語(yǔ)法1:數(shù)組.sort()
? ? ? ? 作用:會(huì)將數(shù)組轉(zhuǎn)換為字符串后 ,一位一位的對(duì)比
? ? ? ? 語(yǔ)法2:.sort(function(a,b){return a - b})
? ? ? ? 作用:會(huì)按照數(shù)組大小升序排列
? ? ? ? ?語(yǔ)法3: ?.sort(function(a,b){return b - a})?
? ? ? ? 作用:會(huì)按照數(shù)組大小降序排列(不能轉(zhuǎn)的按照原始數(shù)組排列)
? ? ? ? 返回值:排序后的數(shù)組
?7.splice
? ? ? ? ?語(yǔ)法1:數(shù)組.splice(開始索引,多少個(gè))
? ? ? ? ?作用:截取數(shù)組部分內(nèi)容 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?語(yǔ)法2:數(shù)組.splice(開始索引,多少個(gè),插入的數(shù)據(jù)1,插入的數(shù)據(jù)2,插入的數(shù)據(jù)3.......)
? ? ? ? ?作用:截取數(shù)組部分內(nèi)容,并插入新的數(shù)據(jù)
? ? ? ? ?返回值:截取出來(lái)的部分內(nèi)容 ?組成的 數(shù)組
?8.slice
? ? ? ? 語(yǔ)法:數(shù)組.slice(開始索引,結(jié)束索引) ??
? ? ? ? 參數(shù):
? ? ? ? ? ?+包前不包后:包含開始索引位置的數(shù)據(jù)不包含結(jié)束索引的位置的數(shù)據(jù) ??
? ? ? ? ? ?+不寫開始索引:默認(rèn)從0開始;不寫結(jié)束索引默認(rèn) 是 數(shù)組的length
? ? ? ? ? ?+ 參數(shù)支持寫負(fù)數(shù),表示倒數(shù)幾個(gè) ,其實(shí)就是 ?length + 負(fù)數(shù)
? ? ? ? ?作用:截取數(shù)組部分索引
? ? ? ? ?返回值:截取出來(lái)的部分 內(nèi)容組成的新數(shù)組
? ??
? ? ? ? ?* 面試題:數(shù)組中有兩個(gè)方法,splice ?和slice,你能描述一下他們兩個(gè)的區(qū)別嗎?
? ? ? ? ?1.參數(shù)含義不同 ? ?介紹一下 參數(shù)哪里不同
? ? ? ? ?2.splice 會(huì)改變?cè)瓟?shù)組,而slice不會(huì)
?
?9.concat
? ? ? ? ?語(yǔ)法:原始數(shù)組.concat(數(shù)組1,數(shù)組2,數(shù)組3,......,數(shù)據(jù)1,數(shù)據(jù)2,.......)
? ? ? ? ?作用:進(jìn)行數(shù)組拼接,把數(shù)組...數(shù)據(jù)之類的小括號(hào)內(nèi)的內(nèi)容,拼接在原始數(shù)組中
? ? ? ? 返回值:拼接好的數(shù)組
?10.join
? ? ? ? ?語(yǔ)法:數(shù)組.join('連接符')
? ? ? ? ?作用:使用"連接符",把數(shù)組內(nèi)的每一個(gè)數(shù)據(jù)連接成一個(gè)字符串(不寫連接符默認(rèn)使用,連接)
? ? ? ? ?返回值:連接好的字符串
11.indexOf
? ? ? ? ?語(yǔ)法1:數(shù)組.indexOf(要檢查的數(shù)據(jù))
? ? ? ? ?作用:從前到后(從左到右)檢查該數(shù)據(jù)第一次在該數(shù)組內(nèi)出現(xiàn) 索引
? ? ? ? ?語(yǔ)法2:數(shù)組.indexOf(要檢查的數(shù)據(jù),開始索引)
? ? ? ? ?作用:在開始索引的位置,按照從左到右的順序,檢查該數(shù)據(jù)第一次在該數(shù)組內(nèi)出現(xiàn)的索引
? ? ? ? ?返回值:找到數(shù)據(jù)的情況下,會(huì)將數(shù)據(jù)第一次出現(xiàn)下標(biāo)[索引]返回
? ? ? ? ?沒找到的情況下,會(huì)直接返回一個(gè) ?-1
? ? ? ? ?備注:開始索引不寫默認(rèn)是 0
12.lastIndexOf
? ? ? ? 語(yǔ)法1:數(shù)組.lastIndexOf (要檢查的數(shù)據(jù))?
? ? ? ? 作用:從后向前(從右向左)檢查該數(shù)據(jù)第一次在該數(shù)組內(nèi)出現(xiàn) 索引
? ? ? ? 語(yǔ)法2:數(shù)組.lastIndexOf(要檢查的數(shù)據(jù),開始索引)
? ? ? ? 作用:在開始索引的位置,按照從右向左的順序,檢查該數(shù)據(jù)第一次在該數(shù)組內(nèi)出現(xiàn)的索引
? ? ? ? 返回值:找到數(shù)據(jù)的情況下,返回第一次出現(xiàn)的下標(biāo)[索引]
? ? ? ??
? ? ? ? 沒找到的情況下,會(huì)直接返回一個(gè) ?-1
遍歷數(shù)組的常用方法
? 1.forEach
? ? ? ? ? ? ? ?語(yǔ)法:數(shù)組.forEach(function(item,index,origin){})
? ? ? ? ? ? ? ?item:數(shù)組的每一項(xiàng) ?的值
? ? ? ? ? ? ? ?index:數(shù)組的每一項(xiàng) 對(duì)應(yīng)的下標(biāo)
? ? ? ? ? ? ? ? origin:原始數(shù)組(了解即可,一般不會(huì)用)
? ? ? ? ? ? ? ? 作用:遍歷數(shù)組
? ? ? ? ? ? ? ? 返回值:該方法永遠(yuǎn)沒有返回值(undefined)
? ? ? ? ? ? ?2.map
? ? ? ? ? ? ? ? 語(yǔ)法:數(shù)組.map(function(item,index,origin){ }) 三個(gè)參數(shù)的意義與foreach 一樣
? ? ? ? ? ? ?作用:映射數(shù)組
? ? ? ? ? ? ? ?返回值:返回一個(gè)和原數(shù)組長(zhǎng)度相同的數(shù)組,但是內(nèi)部數(shù)據(jù)可以經(jīng)過我們的映射加工
? ? ? ? ? ? ? ?映射加工:就是在函數(shù)內(nèi) 以 return 的形式 書寫
? ? ? ? ??
? ? ? ? ? ? ?有一道面試題:數(shù)組常用的遍歷方法有一個(gè) forEach和map ,這兩個(gè)方法有什么區(qū)別?
? ? ? ? ? ? ? ? ? ? ?1.forEach 的作用是來(lái)遍歷數(shù)組,而map 的作用是用來(lái)映射數(shù)組
? ? ? ? ? ? ? ? ? ? ?2.forEach沒有返回值,而map是可以有返回值的
? ? ? ? ??
? ? ? ? ? ? ? 3 . filter
? ? ? ? ? ? ? ? ? ?語(yǔ)法:數(shù)組.filter(function(item,index,origin){}) ? ? ? ? ? ? 三個(gè)參數(shù)的意義與foreach 一樣
? ? ? ? ? ? ? ? ? ? 作用:過濾數(shù)組
? ? ? ? ? ? ? ? ? ? 返回值:返回一個(gè)新數(shù)組,內(nèi)部存儲(chǔ)的值是原始數(shù)組過濾出來(lái)的部分內(nèi)容
? ? ? ? ? ? ? ? ? ?過濾條件:過濾條件以return 的形式書寫
? ? ? ? ??
? ? ? ? ? ? ?4.find
? ? ? ? ? ? ? ? ? ?語(yǔ)法:數(shù)組.find(function(item,index,origin){}) ? ? ? ? ? ? ? ? ?三個(gè)參數(shù)的意義與foreach 一樣
? ? ? ? ? ? ? ? ? ?作用:在數(shù)組內(nèi)查找滿足條件的第一項(xiàng)
? ? ? ? ? ? ? ? ? ?返回值:找到的數(shù)據(jù),如果沒有找到返回undefined
? ? ? ? ? ? ? ? ? ?查找條件以 return 的形式書寫
? ? ? ? ? ? 5.findIndex
? ? ? ? ? ? ? ? ? ?語(yǔ)法:數(shù)組.findIndex(function(item,index,origin){}) ? ? ? ? ? ? ? ? ?三個(gè)參數(shù)的意義與foreach 一樣
? ? ? ? ? ? ? ? ? ?作用:在數(shù)組內(nèi)查找滿足條件的第一項(xiàng) 的下標(biāo)
? ? ? ? ? ? ? ? ? ?返回值:找到的數(shù)據(jù) 的下標(biāo) ,如果沒有找到返回 的是 ?-1
? ? ? ? ? ? ? ? ? ?查找條件以 return 的形式書寫
? ? ? ? ??
? ? ? ? ? ? ? ? 6.some
? ? ? ? ? ? ? ? ? 語(yǔ)法:數(shù)組.some(function(item,index,origin){}) ? ? ? ? ? ? ? ? ?三個(gè)參數(shù)的意義與foreach 一樣
? ? ? ? ? ? ? ? ? ?作用:判斷數(shù)組內(nèi)是否有一個(gè)滿足條件
? ? ? ? ? ? ? ? ? ?返回值:一個(gè)布爾值 ? true/false
? ? ? ? ? ? ? ? ? ?判斷條件以 return ?形式書寫
? ? ? ? ?
? ? ? ? ? ? ? ?7.every
? ? ? ? ? ? ? ? ? ? 語(yǔ)法:數(shù)組.every(function(item,index,origin){}) ? ? ? ? ? ? ? ? ?三個(gè)參數(shù)的意義與foreach 一樣
? ? ? ? ? ? ? ? ? ? 作用:判斷數(shù)組內(nèi)是否全部滿足條件
? ? ? ? ? ? ? ? ? ? 返回值: 一個(gè)布爾值 ? true/false
? ? ? ? ? ? ? ? ? ? 判斷條件以 return ?形式書寫
? ? ? ? ? ? ??
? ? ? ? ? ? ? ? 8.reduce
? ? ? ? ? ? ? ? ? ?語(yǔ)法:數(shù)組.reduce(function(prev,item,index,origin){},init) ??
? ? ? ? ? ? ? ? ? ? prev:表示初始值或上一次運(yùn)算的值
? ? ? ? ? ? ? ? ? ? item:表述數(shù)組每一項(xiàng)的值
? ? ? ? ? ? ? ? ? ? index:表示數(shù)組每一項(xiàng) 的下標(biāo) [索引] ?
? ? ? ? ? ? ? ? ? ? origin:原始數(shù)組
? ? ? ? ? ? ? ? ? ? 作用:用來(lái)實(shí)現(xiàn)疊加效果
? ? ? ? ? ? ? ? ? ? 返回值:最終疊加的結(jié)果
? ? ? ? ? ? ? ? ? 注意:
? ? ? ? ? ? ? ? ? ? ? ?+疊加條件以return 的形式書寫
? ? ? ? ? ? ? ? ? ? ? ?+prev 第一次的值,如果你傳遞了 init,就是init的值,如果沒有傳遞init,那么就是數(shù)組[0]的值
? ? ? ? ? ? ? ? ? ? ? ?+如果傳遞了init,循環(huán)執(zhí)行數(shù)組.length次,如果沒有傳遞init,循環(huán)執(zhí)行數(shù)組.length-1次
? ? ? ??
? ? ? ??
? ?數(shù)組塌陷
? ?數(shù)組塌陷現(xiàn)象:在對(duì)數(shù)組進(jìn)行操作的時(shí)候,會(huì)使數(shù)組的長(zhǎng)度產(chǎn)生變化,同時(shí)操作的數(shù)組那個(gè)項(xiàng)的下一個(gè)索引會(huì)被跳過,從而造成數(shù)組的某項(xiàng)會(huì)被跳過,這種叫做數(shù)組塌陷現(xiàn)象。
? ?解決辦法:就是在對(duì)數(shù)組某項(xiàng)進(jìn)行操作之后,手動(dòng)將索引值 i --,保持?jǐn)?shù)組每一項(xiàng)都被遍歷。
? ?
數(shù)學(xué)的方法
? ? ? ? ? ?
? ? ? ? ? ? ?在JS 中Math 對(duì)象給我們提供了操作數(shù)據(jù)的一些方法(數(shù)學(xué)方法)
? ? ? ? ? ? ?1.random
? ? ? ? ? ? ?語(yǔ)法:math.random()
? ? ? ? ? ? ?作用:得到一個(gè)隨機(jī)數(shù),每次生成的數(shù)字都不一樣,但一定是0~1之間的,包含0不包含1,也就是說最大值可能是0.999999999999999
? ? ? ? ??
? ? ? ? ? ? ? 2.round
? ? ? ? ? ? ?語(yǔ)法:Math.round(數(shù)字)
? ? ? ? ? ? ?作用:將這個(gè)數(shù)字(小數(shù)),按照四舍五入變成整數(shù)
? ? ? ? ??
? ? ? ? ? ? ? 3.ceil
? ? ? ? ? ? ?語(yǔ)法:Math.ceil(數(shù)字)
? ? ? ? ? ? ? 作用:將這個(gè)數(shù)字(小數(shù))向上取整
? ? ? ? ??
? ? ? ? ? ? ? 4.floor
? ? ? ? ? ? ? ?語(yǔ)法:Math.floor(數(shù)字)
? ? ? ? ? ? ? ?作用:將這個(gè)數(shù)字(小數(shù))向下取整
? ? ? ? ??
? ? ? ? ? ? ? ? 5.abs
? ? ? ? ? ? ? ?語(yǔ)法:Math.abs(數(shù)字)
? ? ? ? ? ? ? ?作用:返回這個(gè)數(shù)字的絕對(duì)值
? ? ? ? ??
? ? ? ? ? ? ? ? 6.sqrt
? ? ? ? ? ? ? ? 語(yǔ)法:Math.sqrt(數(shù)字)
? ? ? ? ? ? ? ? 作用:求 平方根
? ? ? ? ? ? ? ?
? ? ? ? ? ? ? ? ?7.pow
? ? ? ? ? ? ? ? 語(yǔ)法:Math.pow(基數(shù),冪)
? ? ? ? ? ? ? ? 作用:返回基數(shù)的幾次冪(幾的幾次方乘積)
? ? ? ? ? ? ?
? ? ? ? ? ? ? ? ?8.max
? ? ? ? ? ? ? ? ? 語(yǔ)法:Math.max(數(shù)字1,數(shù)字2,數(shù)字3.......)
? ? ? ? ? ? ? ? ?作用:返回傳入數(shù)字中最大的那一個(gè)
? ? ? ? ??
? ? ? ? ? ? ? ? ?9.min
? ? ? ? ? ? ? 語(yǔ)法:Math.min(數(shù)字1,數(shù)字2,數(shù)字3.......)
? ? ? ? ? ? ? ? 作用:返回傳入數(shù)字中最小的那一個(gè)
? ? ? ? ??
? ? ? ? ? ? ? ? ?10.pI(i是大寫)
? ? ? ? ? ? ? ? 語(yǔ)法:Math.pI
? ? ? ? ? ? ? ? ? 作用:返回π ? //3.1415926
? ? ? ? ?js嚴(yán)格模式
? ? ? ? ? 1.聲明變量必須要 var 關(guān)鍵字
? ? ? ? ? 2.函數(shù)的形參不可以重復(fù)
? ? ? ? ? ?對(duì)自己書寫的代碼做一個(gè)要求
? ? ? ? ? ?寫在script代碼最開始的第一行,寫字符串形式'use strict'
?字符串
創(chuàng)建字符串的方式
? ? ? ? ? ? ?1.字面量的形式創(chuàng)建字符串
? ? ? ? ? ? ? ? ? ? ?var str = '123'
? ? ? ? ? ? ?2.內(nèi)置構(gòu)造函數(shù)的形式創(chuàng)建字符串
? ? ? ? ? ? ? ? ? ? ?var str = new String() ?
?字符串的length與下標(biāo)
? ? ? ? ? ? ? ?length與下標(biāo)的含義與數(shù)組中的一樣
? ? ? ? ? ? ? ?length:長(zhǎng)度
? ? ? ? ? ? ? ?索引(下標(biāo)):獲取到字符串中指定位置的
? ? ? ? ? ? ? ?注意:字符串中通過索引能夠獲取到指定位置的值,只不過獲取到的值是 ?只讀的 (能看不能改)
?字符串的常用方法
? ? ? ? ? ? 1.charAt
? ? ? ? ? ? ? 語(yǔ)法:字符串.charAt(索引)
? ? ? ? ? ? ? 作用:查詢指定下標(biāo)的值
? ? ? ? ? ? ? 返回值:查詢到的值,如果沒有查詢到就是一個(gè) 空字符串
? ? ? ? ? ? 2.charCodeAt
? ? ? ? ? ? ? ?語(yǔ)法:字符串.charCodeAt (索引)
? ? ? ? ? ? ? ?作用:查詢指定下標(biāo)的值 ?對(duì)應(yīng)的十進(jìn)制碼
? ? ? ? ? ? ? ?返回值:查詢到的值對(duì)應(yīng)的十進(jìn)制碼,如果沒有查詢到會(huì)返回一個(gè)NaN
? ? ? ? ? ? 3.toLowerCase ?
? ? ? ? ? ? ? ?語(yǔ)法:字符串.toLowerCase () ?
? ? ? ? ? ? ? ?作用:將這個(gè)字符串轉(zhuǎn)換為小寫
? ? ? ? ? ? ? ?返回值:轉(zhuǎn)換后的字符串
? ? ? ? ? ? 4.toUpperCase
? ? ? ? ? ? ? ?語(yǔ)法:字符串.toUpperCase ()
? ? ? ? ? ? ? ?作用:將這個(gè)字符串轉(zhuǎn)換為大寫
? ? ? ? ? ? ? ?返回值:轉(zhuǎn)換后的字符串
? ? ? ? ? ?1.substr
? ? ? ? ? ? ? ? 語(yǔ)法:字符串.substr(開始索引,多少個(gè))
? ? ? ? ? ? ? ? 作用:截取指定的字符串
? ? ? ? ? ? ? ? 返回值:截取到的字符串
? ? ? ? ? ? ? ? 注意:官方說明這個(gè)方法將來(lái)某一天可能會(huì)刪除,所以建議我們使用 ?substring
? ? ? ? ? ? ?2.substring
? ? ? ? ? ? ? ? 語(yǔ)法:字符串.substring(開始索引,結(jié)束索引)
? ? ? ? ? ? ? ? 作用:截取指定的字符串
? ? ? ? ? ? ? ? 返回值:截取到的字符串
? ? ? ? ? ? ? ? 注意:
? ? ? ? ? ? ? ? ? ? ? 1.參數(shù)包前不包后
? ? ? ? ? ? ? ? ? ? ? 2.結(jié)束索引可以不寫,相當(dāng)于寫了length
? ? ? ? ? ? ?3.slice(建議使用)
? ? ? ? ? ? ? ?語(yǔ)法:字符串.slice(開始索引,結(jié)束索引)
? ? ? ? ? ? ? ?作用:截取指定的字符串
? ? ? ? ? ? ? ?返回值:截取到的字符串
? ? ? ? ? ? ? ?注意:
? ? ? ? ? ? ? ? ? ? ? 1.參數(shù)包前不包后
? ? ? ? ? ? ? ? ? ? ? 2.結(jié)束索引可以不寫 相當(dāng)于寫了length
? ? ? ? ? ? ? ? ? ? ? 3.開始索引可以不寫 相當(dāng)于寫了0
? ? ? ? ? ? ? ? ? ? ? 4.結(jié)束索引支持寫負(fù)數(shù),相當(dāng)于length + 負(fù)數(shù)
? ? ? ? ? ? 1.concat
? ? ? ? ? ? ? ? ?語(yǔ)法:字符串.concat(數(shù)據(jù)1,數(shù)據(jù)2,數(shù)據(jù)3......)
? ? ? ? ? ? ? ? ?作用:將字符串和 參數(shù)傳遞數(shù)據(jù) 進(jìn)行拼接
? ? ? ? ? ? ? ? ?返回值:拼接后的字符串
? ? ? ? ? ? 2.indexOf
? ? ? ? ? ? ? ? ? 語(yǔ)法:字符串.indexOf(數(shù)據(jù),開始下標(biāo))
? ? ? ? ? ? ? ? ? 作用:尋找數(shù)據(jù)在字符串中的位置
? ? ? ? ? ? ? ? ? 返回值:找到的時(shí)候返回下標(biāo),找不到返回-1
? ? ? ? ? ? ? ? ? 注意:第二個(gè)參數(shù)可以不傳遞,默認(rèn)為0
? ? ? ? ? ? 3.lastIndexOf
? ? ? ? ? ? ? ? 語(yǔ)法:字符串.lastIndexOf(數(shù)據(jù),開始索引) ?
? ? ? ? ? ? ? ? 作用:尋找數(shù)據(jù)在字符串中的位置(從后往前/從右向左) ? ?
? ? ? ? ? ? ? ? 返回值:找到的時(shí)候返回下標(biāo),找不到返回-1
? ? ? ? ? ? ? ? 注意: 第二個(gè)參數(shù)可以不傳遞,默認(rèn)為 length-1(字符串最后一個(gè)位置) ?
? ? ? ? ? ? 4.split
? ? ? ? ? ? 語(yǔ)法:字符串.split('符號(hào)')
? ? ? ? ? ? 作用:在字符串中找到'符號(hào)' 然后將這個(gè)字符串分割,并放在一個(gè)數(shù)組內(nèi)
? ? ? ? ? ? 返回值:一個(gè)數(shù)組
? ? ? ? ? ? 注意:參數(shù)如果傳遞的是 空字符串('')會(huì)將字符串全部分隔開
1.trim(重點(diǎn))
? ? ? ? ? ? 語(yǔ)法:字符串.trim()
? ? ? ? ? ? 作用:去掉字符串兩側(cè)的空格
? ? ? ? ? ? 返回值:去掉空格后的字符串
? ? ? ? ? ? 2.trimStart ?/trimLeft
? ? ? ? ? ? 語(yǔ)法:字符串.trimStart() ?字符串.trimLeft
? ? ? ? ? ? 作用:去掉字符串開始(左側(cè))的空格
? ? ? ? ? ? 返回值:去掉空格后的字符串
? ? ? ? ? ? 3.trimEnd /trimRight
? ? ? ? ? ? 語(yǔ)法:字符串.trimEnd() ?字符串.trimRight()
? ? ? ? ? ? 作用:去掉字符串結(jié)束(右側(cè))的空格
? ? ? ? ? ? 返回值:去掉空格后的字符串
1.includes
? ? ? ? ? 語(yǔ)法:字符串.includes(字符串片段)
? ? ? ? ? 作用:判斷 當(dāng)前字符串中,是否擁有指定字符串片段
? ? ? ? ? 返回值:一個(gè)布爾值
? ? ? ? ? ? ? ? ? true --- > 擁有
? ? ? ? ? ? ? ? ? false --- > 沒有
? ? ? ? ?2.startsWith
? ? ? ? ? ?語(yǔ)法:字符串.startsWith(字符串片段) ? ?
? ? ? ? ? ?作用:判斷字符串開頭 是不是指定的 字符串片段
? ? ? ? ? ?返回值:一個(gè)布爾值
? ? ? ? ? ? ? ? ? true --- > 是開頭
? ? ? ? ? ? ? ? ? false --- >不是開頭
? ? ? ? 3.endsWith
? ? ? ? ? ? ?語(yǔ)法:字符串.endsWith(字符串片段)
? ? ? ? ? ? ?作用:判斷字符串結(jié)尾 是不是指定的 字符串片段 ?
? ? ? ? ? ? ?返回值:一個(gè)布爾值
? ? ? ? ? ? ? ? ? true --- > 是結(jié)尾
? ? ? ? ? ? ? ? ? false --- >不是結(jié)尾
? ? ? ? ? ? ? ? ? 163郵箱 ? 以@163.com結(jié)尾
? ? ? ? ? 4.replace
? ? ? ? ? ? ? ?語(yǔ)法:字符串.replace('要被替換的字符','替換的字符') ?
? ? ? ? ? ? ? ?作用:找到當(dāng)前字符串中的第一個(gè)參數(shù)的值,然后將其替換為第二個(gè)參數(shù)
? ? ? ? ? ? ? ?返回值:替換完成的參數(shù) ? ?
進(jìn)制轉(zhuǎn)換與保留小數(shù)
1.進(jìn)制轉(zhuǎn)換(了解)
? ? ? ? ? ? 1.十進(jìn)制轉(zhuǎn)換為其他進(jìn)制
? ? ? ? ? ? 語(yǔ)法:十進(jìn)制數(shù)字.toString(幾進(jìn)制)
? ? ? ? ? ? 2.其他進(jìn)制轉(zhuǎn)換為十進(jìn)制
? ? ? ? ? ? 語(yǔ)法:parseInt(數(shù)字,將數(shù)字視為幾進(jìn)制的數(shù)字然后轉(zhuǎn)換為10進(jìn)制的數(shù)字)
? ? ? ? 2. 保留小數(shù)(掌握)
? ? ? ? ?語(yǔ)法:toFixed(保留幾位小數(shù)),保留小數(shù)的時(shí)候四舍五入,并且返回的是字符串 ?
?定時(shí)器(兩種)
? ? ? ? 1.setInterval ?計(jì)時(shí)器,每間隔固定的時(shí)間執(zhí)行一次
? ? ? ? ? ? ? ?語(yǔ)法:setInterval(函數(shù),數(shù)字/時(shí)間)
? ? ? ? ? ? ? ? ? ?函數(shù):每間隔固定的時(shí)間要執(zhí)行的代碼
? ? ? ? ? ? ? ? ? ?數(shù)字:間隔的時(shí)間,注意單位是毫秒,最小值為4~20
? ? ? ? ?2.setTimeout ?倒計(jì)時(shí)器,在指定時(shí)間到達(dá)后,執(zhí)行一次
? ? ? ? ? ? ? ? ? 語(yǔ)法;setTimeout(函數(shù),數(shù)字) ?
? ? ? ? ? ? ? ? ? 函數(shù):在指定時(shí)間結(jié)束后執(zhí)行要執(zhí)行的代碼
? ? ? ? ? ? ? ? ? 數(shù)字:間隔的時(shí)間,單位也是毫秒 ? ?
? ? ? ? 兩個(gè)定時(shí)器的返回值與意義
? ? ? ? ? ? ? ?+返回值不區(qū)分定時(shí)器種類,用于表示你這個(gè)定時(shí)器是頁(yè)面中第幾個(gè)定時(shí)器
? ? ? ? ? ? ? ?+作用:用來(lái)關(guān)閉定時(shí)器
異步代碼
?簡(jiǎn)單的代碼異步執(zhí)行(這里并不是詳細(xì)的,后面會(huì)講)
? ? ? ? 這是一道面試題,熟讀并背誦全文
? ? ? ? ? 什么是非異步代碼
? ? ? ? ? ? ? 按照從上往下的順序,從左到右的順序,依次執(zhí)行每一行代碼
? ? ? ? ? ? ? 如果上一行代碼沒有執(zhí)行完畢,不會(huì)執(zhí)行下一行代碼
? ? ? ? ?什么是異步代碼
? ? ? ? ? ? ?當(dāng)代碼遇到異步任務(wù)的時(shí)候,會(huì)把這個(gè)代碼放在'異步隊(duì)列’ 內(nèi)等待
? ? ? ? ? ? ?所有的同步代碼執(zhí)行完畢后,開始執(zhí)行"異步隊(duì)列"內(nèi)的代碼
? ? ? ? ?簡(jiǎn)單來(lái)說:代碼在執(zhí)行的時(shí)候,會(huì)把這個(gè)代碼放在‘異步隊(duì)列’內(nèi)等著,讓后繼續(xù)執(zhí)行直到把所有的同步代碼執(zhí)行完畢后,再開始執(zhí)行異步任務(wù)
? ? ? ? ? ? 什么是異步任務(wù)
? ? ? ? ? ? 兩種定時(shí)器都是異步任務(wù)
? ? ? ? ? ? 可以理解為:先執(zhí)行定時(shí)器外面的代碼,然后執(zhí)行定時(shí)器里面的
?
時(shí)間對(duì)象?
? ? ? 時(shí)間對(duì)象?
? ? ? ? ? ? ? ? 在JS鐘 Date 給我們提供了操作時(shí)間的一些方法,是JS 內(nèi)置的一個(gè)對(duì)象
?var str = new Date()console.log(str)? ?時(shí)間對(duì)象的參數(shù)
? ?創(chuàng)建對(duì)象的時(shí)候,看可以選擇傳遞函數(shù),也可以不傳遞函數(shù)
? ? ? ? ? ? ? ? ?如果需要傳遞參數(shù),分為兩種形式
? ? ? ? ? ? ? ? ? ?1.數(shù)字
? ? ? ? ? ? ? ? ? ? ?最少傳遞兩個(gè)值,年 ?和 月(JS中0-11 代表了 1-12月)
? ? ? ? ? ? ? ? ? ? ?2.字符串
? ? ? ? ? ? ? ? ? ? ?最少值需要傳遞一個(gè)參數(shù)年份即可(字符串的形式傳遞時(shí)月份從 1 開始)
? ? ? ? ? ? ? ? ?不寫參數(shù)會(huì)返回本地時(shí)間的年月日
?
?獲取時(shí)間對(duì)象
var time = new Date()
? ? ? ? console.log(time)
? ? ?1.得到時(shí)間對(duì)象的 年份
? ? ? ? var year = time.getFullYear()
? ? ? ? console.log(year)?
? ? ??2.得到時(shí)間對(duì)象的 月份
? ? ? ? var month = time.getMonth()
? ? ? ? console.log(month) //1月-->0
? ? ?3.得到時(shí)間對(duì)象的 日
? ? ? ? var day = time.getDate()
? ? ? ? console.log(day)?
? ? ? 4..得到時(shí)間對(duì)象的 小時(shí)
? ? ? ? var hours = time.getHours()
? ? ? ? console.log(hours)
? ? ? 5..得到時(shí)間對(duì)象的 分鐘
? ? ? ? var minutes = time.getMinutes()
? ? ? ? console.log(minutes)
? ? ? 6..得到時(shí)間對(duì)象的 秒數(shù)
? ? ? ? var seconds = time.getSeconds()
? ? ? ? console.log(seconds)// 0-59
? ? ? 7.得到時(shí)間對(duì)象中的 ?一周的第幾天(周日為0,周六為6)
? ? ? ? var days = timer.getDay()
? ? ? ? console.log(days)
? ? ? 8. getTime ?按照 ?格林威治時(shí)間來(lái)計(jì)算 從 1970年1月1日0時(shí)0分0秒 到現(xiàn)在(或指定日期)的毫秒數(shù)
? ? ? ? var getTimes = timer.getTime()
? ? ? ? console.log(getTimes)
設(shè)置時(shí)間對(duì)象?
? ? var timer = new Date()
? ? ? ? //設(shè)置 年
? ? ? ? timer.setFullYear(2001)
? ? ? ? console.log(timer.getFullYear())
? ? ? ? //設(shè)置 月
? ? ? ? timer.setMonth(3)
? ? ? ? console.log(timer.getMonth())
? ? ? ? //設(shè)置 日當(dāng)月第幾天
? ? ? ? timer.setDate(15)
? ? ? ? console.log(timer.getDay())
? ? ? ? // 注意,沒有設(shè)置 本周的第幾天
? ? ? ? //設(shè)置 時(shí)
? ? ? ? timer.setHours(15)
? ? ? ? console.log(timer.getHours())
? ? ? ? //設(shè)置 分
? ? ? ? timer.setMinutes(25)
? ? ? ? console.log(timer.getMinutes())
? ? ? ? //設(shè)置 秒
? ? ? ? timer.setSeconds(35)
? ? ? ? console.log(timer.getSeconds())
? ? ? ? //設(shè)置 豪秒
? ? ? ? timer.setMilliseconds(999)
? ? ? ? console.log(timer.getMilliseconds())
? ? ? ? //設(shè)置到 1970 的總毫秒數(shù)
? ? ? ? timer.setTime(12345667)
? ? ? ? console.log(timer.getTime())
?
認(rèn)識(shí)BOM
?用JS 操作瀏覽器 和頁(yè)面中的 HTML 元素
? ? ? ? ?BOM
? ? ? ? ?瀏覽器對(duì)象模型,其實(shí)就是操作瀏覽器的一些能力
? ? ? ? ? ?我們可以操作哪些內(nèi)容?
? ? ? ? ? ? ?+獲取瀏覽器的相關(guān)信息(窗口大小) ? ?
? ? ? ? ? ? ?+操作瀏覽器進(jìn)行頁(yè)面的跳轉(zhuǎn)
? ? ? ? ? ? ?+獲取瀏覽器的地址欄信息
? ? ? ? ? ? ?+操作瀏覽器的滾動(dòng)條
? ? ? ? ? ? ?+獲取瀏覽器的版本
? ? ? ? ? ? ?+讓瀏覽器出現(xiàn)一個(gè)彈出框
? ? ? ? ? ? ?+........
? ? ? ? ? ? ?BOM 的核心就是 window 對(duì)象
? ? ? ? ? ? ? ? ?window 時(shí) JS 內(nèi)置的一個(gè)對(duì)象,里面包含著操作瀏覽器的方法
?體驗(yàn)BOM
?獲取瀏覽器窗口的尺寸
? ? ? ? innerHeight/innerWidth
? ? ? ? ? +作用:獲取到瀏覽器窗口的高度和寬度(包含滾動(dòng)條)
? ? ? ? ? +語(yǔ)法:window.innerHeight /window.innerWidth
console.log('高度', window.innerHeight)console.log('寬度', window.innerWidth)? ? ? ? 2.瀏覽器的彈出層(學(xué)習(xí)的時(shí)候會(huì)用,實(shí)際工作中不會(huì)使用)
? ? ? ? ? ? alert
? ? ? ? ? ? prompt
? ? ? ? ? ? confirm
? ? ? ? ? ? ? ? 有一個(gè)詢問信息和兩個(gè)按鈕
? ? ? ? ? ? ? ? 點(diǎn)擊確定按鈕返回 true
? ? ? ? ? ? ? ? 點(diǎn)擊取消按鈕返回 false ?
var str = confirm('請(qǐng)問你確定進(jìn)入頁(yè)面嗎')console.log(str)總結(jié)
- 上一篇: 深度学习的可解释性——Striving
- 下一篇: imgcook(图像大厨)初体验,图片转