js中基礎知識大綱灿里,了解記憶,總會有用到的地方
?了解重要的歷史節(jié)點
+ 重點掌握WEB1.0~WEB3.0的進化史
? ? + 動態(tài)頁面
? ? + 前后端分離
? ? + WebApp(NativeApp)
? ? + 全棧開發(fā)
? ? + 前端需要掌握的技術棧
? ?+ ECMAScript3 / ECMAScript5 / ECMAScript6(每年6月份在版本6的基礎上繼續(xù)完善一版ES7~9)
瀏覽器內核分類
+ webkit
+ gecko
+ trident
+ blink
+ ...
JS三部分
+ ECMAScript 語法規(guī)范
+ DOM
+ BOM
變量和變量定義
+ 變量就是起了一個名字袄琳,用來存儲(指向)或者代表某個值的(它是一個虛的東西,值才是實在的東西)
+ 命名規(guī)范
? ? + 嚴格區(qū)分大小寫
? ? + 駝峰命名法
? ? + 基于“_科平、$新思、數(shù)字、字母” 命名猪叙,但是數(shù)字不能作為開頭
? ? + 不能使用關鍵字和保留字
?定義變量的幾種方式? **(重點)
+var
+let
+const定義的變量娇斩,變量指向不能隨意被更改(理解為定義的是常量)
+function
+class
+import
JS中的數(shù)據(jù)類型 **(重要哦)
+ 基本數(shù)據(jù)類型(值類型 / 原始值)
+number
+string
+boolean
+null
+undefined
? ? + symbol
? ? + bigint
+ 引用數(shù)據(jù)類型
? ? + 對象數(shù)據(jù)類型
? ? ? ? + {} 普通對象
? ? ? ? + [] 數(shù)組對象
+/^$/正則對象
? ? ? ? + 日期對象
+Math數(shù)學函數(shù)對象
? ? ? ? + ...
? ? + 函數(shù)數(shù)據(jù)類型
數(shù)據(jù)類型的檢測
typeof
+ 語法 =>typeof[value]
+ 返回值首先是字符串仁卷,其次包含對應的類型 =>typeoftypeof[] ==="string"
+typeofnull==="object"
+ 數(shù)組、正則犬第、普通對象的最后檢測結果都是"object"锦积,所以基于此操作,無法細分對象
+instanceof
+constructor
+ Object.prototype.toString.call()
數(shù)字類型詳解 **
+NaN和isNaN
+typeofNaN==="number"
+NaN!==NaN
+ 基于isNaN檢測值是否為有效數(shù)字(檢測的值不是數(shù)字類型歉嗓,需要默認基于Number()把其轉換為數(shù)字類型丰介,然后再檢測)
+ 把其它數(shù)據(jù)類型轉換為數(shù)字類型
+Number([value])
+ 字符串轉換為數(shù)字:空字符串是0,字符串中只要出現(xiàn)任意一個非有效數(shù)字字符鉴分,結果都是NaN
+ 布爾轉換為數(shù)字:true是1false是0
+null變?yōu)閿?shù)字0
+undefined變?yōu)閿?shù)字NaN
? ? ? ? + symbol不能轉換為數(shù)字哮幢,否則會報錯
? ? ? ? + 對象(或者函數(shù))轉換為數(shù)字:首先都是調用toString先轉換且字符串,然后再轉換為數(shù)字
+ 普通對象轉換為字符串結果都是"[object Object]"
? ? ? ? ? ? + 數(shù)組對象轉換為字符串結果是:用逗號分隔數(shù)組中的每一項?
+ [] ->''(空數(shù)組轉為空字符串)
+ [10] ->'10'(數(shù)字第一步都先轉化為字符串)
+ [10,20] ->'10,20'
? ? ? ? ? ? + 正則或者函數(shù)轉換為字符串和原始看到的內容類似
+parseInt([value]) /parseFloat([value])
? ? ? ? + 首先把[value]值變?yōu)樽址菊洌浯螐淖址钭髠乳_始找橙垢,把找到的有效數(shù)字字符轉換為數(shù)字,遇到一個非有效數(shù)字字符則結束查找(不論右側是否還有數(shù)字伦糯,都不在查找了)
+Number(true) ->1
+parseInt(true) ->NaN
+Number('12px') ->NaN
+parseInt('12px') ->12
+ 一些常用的屬性方法
? ? + 數(shù)字.toFixed(N)? 保留小數(shù)點N位柜某,返回結果是一個字符串
+Infinity無窮大
? ? + ...
字符串類型詳解 **
+ 把其它數(shù)據(jù)類型轉換為字符串
? ? + String([value])
? ? + [value].toString()
+ 加號在JS中除了數(shù)學運算,還有字符串拼接
? ? + 減乘除和取余都一定是數(shù)學運算(不是數(shù)字類型要轉換為數(shù)字類型敛纲,然后再運算)
? ? + 加號兩邊的任意一邊出現(xiàn)字符串喂击,則為字符串拼接(如果加的是一個對象,其實最后也是字符串拼接淤翔,因為對象轉換為數(shù)字翰绊,是先轉換為字符串的)
+1+'1'==='11'
+1+ ['10] ===110'
+ 基于ES6中的模板字符串(反引號 或者叫 兩個撇)可以方便字符串拼接
```
//=> ${} 就是把一個變量的值或者一個JS表達式運行的結果,拼接到模板字符串中
letn=10;
letstr=`N的值是:${n}`;
```
布爾類型詳解 **
+ 把其它數(shù)據(jù)類型轉換為布爾類型
+ 規(guī)律:只有“0办铡、NaN辞做、null琳要、undefined寡具、空字符串”五個值最后變?yōu)镕ALSE,其余都會轉換為TRUE
+ Boolean([value])
+ ![value] 轉換為布爾再取反
+ !![value] 轉換為布爾
+----
? ? + 在條件判斷中稚补,最后的結果都是轉換為布爾
? ? + ...
對象數(shù)據(jù)類型詳解 **
+ 對象的組成:零到多組鍵值對組成的(key:value / 屬性名:屬性值)童叠,每一組之間用逗號分隔
+ 關于對象鍵值對的操作(增刪改查)
? ? + 對象的屬性名不能重復
? ? + 對象.屬性名? => 這樣操作屬性名不能是數(shù)字
+ 對象[屬性名]? => obj['n']和obj[n]是不一樣的,前者屬性名就是n课幕,候著是把n變量存儲的值作為屬性名拿過來操作的(假設n是100厦坛,此時相當于obj[100])
基本數(shù)據(jù)類型和引用數(shù)據(jù)類型的區(qū)別?*(很重要)
-數(shù)據(jù)檢測內容?
+ 堆內存(HEAP)和棧內存(STACK)
+ 棧內存
? ? + ECStack 執(zhí)行環(huán)境棧
+ EC(G)全局執(zhí)行上下文
+ VO(G)全局變量對象
+ let a =12
+ 創(chuàng)建12這個值,存放到棧內存中(棧內存是用來執(zhí)行代碼和存儲基本類型值的)
+ 創(chuàng)建變量a存儲到 VO(G)
+ 最后讓a指向12這個值 (=賦值的意思就是值的指向)
+ 堆內存
+ let obj = {xxx:'xxx'}
? ? ? ? + 創(chuàng)建對象值(引用數(shù)據(jù)類型不能直接存儲到棧內存中)
+ 創(chuàng)建一個堆內存乍惊,有一個16進制地址(AAAFFF000)
? ? ? ? ? ? + 把對象中的鍵值對存儲到堆中
? ? ? ? ? ? + 把堆內存的地址存放到棧內存中杜秸,供變量指向
+ 創(chuàng)建變量obj,存儲到VO(G)
+ 讓obj指向堆內存的地址 AAAFFF000
? ? + 后期obj.xxx的所有操作润绎,都是先基于地址找到堆內存撬碟,從而來操作堆內存中的內容
DOM的一些操作 **
+ document.getElementById
+ document.body
? ? + JS中獲取的元素都是對象數(shù)據(jù)類型的(有自己對應的堆內存诞挨,堆內存中存儲著很多內置的屬性和方法,這些屬性方法就是用來操作DOM元素的)
? ? ? ? + id
? ? ? ? + className
? ? ? ? + tagName
? ? ? ? + innerHTML
? ? ? ? + innerText
? ? ? ? + style = 對象? 操作當前元素的“行內”樣式
? ? ? ? + onclick
? ? ? ? + ...
+ context.getElementsByTagName
? ? + 獲取到的是一個“類數(shù)組”元素集合 HTMLCollection
? ? + 操作起來和數(shù)組類似(基于索引獲取某一項以及循環(huán)操作等)
JS中常用的操作語句 **
+ 判斷語句
+if呢蛤、elseif惶傻、else
? ? + 三元運算符
? ? ? ? + 語法? 條件?成立:不成立;
+ 基于null/undefined占位
? ? ? ? + 多個事情基于括號包起來,逗號分隔
? ? ? ? + 三元嵌套
+switchcase
+ 每一種case都是===判斷
? ? ? ? + == 和 === 的區(qū)別
+ 循環(huán)語句
+for循環(huán):指定循環(huán)次數(shù)或者遍歷數(shù)組
? ? ? ? + 四步操作
+break
+continue
+forin循環(huán):變量對象中的鍵值對的
? ? ? ? + 優(yōu)先按照從小到大遍歷數(shù)字屬性
? ? + ...
JS中常用的輸出方式
+ console
+.log
+.dir
+.table
+.time/.timeEnd
+.warn
? ? + ...
+ 瀏覽器彈出窗口(輸出的結果都會變?yōu)樽址?/p>
? ? + alert
? ? + confirm
? ? + prompt
+ 向頁面中輸出內容的(輸出的結果都會變?yōu)樽址?/p>
+ document.write
+ 元素.innerHTML
+ 元素.innerText
? ? + ...
函數(shù)(function)
一個處理事情的方法其障,例如:洗衣機就是一個函數(shù)
1.生產洗衣機
把洗衣服的操作的集成在一起
相當于一個函數(shù):函數(shù)的目的就是把實現(xiàn)一個功能的代碼進行封裝银室,以后再想實現(xiàn)這個功能,我們只需要執(zhí)行方法即可励翼,無需再把代碼寫一遍 => “低耦合蜈敢、高內聚”:減少頁面中的冗余代碼,提高代碼的重復使用率
2.讓洗衣機運行
執(zhí)行函數(shù)
函數(shù)兩部分:定義函數(shù)汽抚、執(zhí)行函數(shù)(光定義函數(shù)是沒有用的扶认,只有把函數(shù)執(zhí)行,才能起到對應的作用)
沒有學不會的東西只要你肯努力
-----------------------------------------------------------------------------------努力成為:前端晨