1.1高階語言我們寫完的程式碼不能直接執行,要先經過js引擎翻譯成0101這種機器語言才能執行
1.2 弱型別語言變數可以在前一行設定為一個數字,下一行修改為一個字串
1.3 指令碼語言程式碼從上往下 逐行執行 只有遇到報錯才會中止程式碼的執行
2. 程式執行機制
2.1 執行某個程式碼檔案的時候,是先把程式碼從硬碟載入到記憶體當中
3. JS是由三部分組成
ECMAScript + DOM + BOM
4. JS的三種書寫位置
行內 + 內部 + 外聯
5. JS的輸入輸出語句
5.1 prompt 輸入語句
5.2 alert 彈出語句
5.3 console.log 控制檯輸出
6. 變數的宣告
6.1 變數宣告 var a;
6.2 變數賦值 var a; a = 100;
6.3 變數初始化 var a = 100;
6.4 同時定義多個變數 var a = 1, b = 2, c = 3;
6.5 如果之宣告變數,變數的值是 》 undefined
6.6 變數的命名規範》字母、數字、下劃線、$開頭
6.7 交換兩個變數的三種方法
1 // 使用中間變數 2 var a = 10, b = 20 , temp = 0 3 temp = a 4 a = b 5 b = temp 6 7 // 使用ES6結構賦值 8 [b,a] = [a,b] 9 10 // 直接交換 11 a = a + b 12 b = a - b 13 a = a - b
7. 變數的資料型別
7.1 基本資料型別 number 、string、null、boolean、undefined
7.2 引用資料型別 object、array、function
7.3 兩者區別》在比較和拷貝的時候基本資料型別參考的是值,引用資料型別參考的是地址
8. 數字型別
8.1 isNaN》判斷一個變數是非數字型別,返回布林值。isNaN(123) === false
8.3 字串轉換成數字型別》parseInt()/parseFloat()、Number(str)、str - 0
9. 字串型
9.1 數字轉換成字串》String(123)、str + ' '
9.2 字串的長度 str.length
9.3 模板字串 ``
10. 哪些值是true 哪些是false
10.1 null、undefined、NaN、0、' '、false
11. 前置遞增和後置遞增的區別
11.1 前置先+1後運算,後置先運算再+1
1 var a = 10 2 // a++ = 10=> a = 11 => ++a => 12 3 var c = a++ + ++a // 10 + 12
12. 短路運算子(邏輯中斷)
1 var a = 1 2 var b = 10 3 var c = a || b // c = 1 邏輯或一邊為真就返回值 4 var d = a && b // d= 10 邏輯與兩邊為真才返回值
13. 運算子的優先順序
13.1 括號 > 一元運算子 > 算數運算子 > 關係運算子 > 相等運算子 > 邏輯運算子 > 賦值運算子 > 逗號運算子
14 . 檢測資料型別
14.1 typeof檢測的6種資料型別(只能區分值型別,無法區分引用型別)
型別 | 返回值(string) |
---|---|
{ } [ ] null | 'object' |
String | 'string' |
Number | 'function' |
Boolean | 'function' |
undefined | 'undefined' |
Function | 'function' |
15. 三元表示式
15.1 條件表示式?表示式1:表示式2
16. 字串補0
var str = 'abc' var zstr = str.padStart(5,'0') // zstr = '00abc'
17. if-else和switch-case的區別
17.1 只有很多條件,並且條件是具體的值的時候用switch-case 效能高一點
17.2 if-else多用於一個範圍
18. while,do-while,for迴圈的區別
18.1 for迴圈多用於知道具體迴圈多少次 最常用
18.2 while和do while用於不知道具體迴圈次數,且do while無論條件true 或 false都會執行一次
19. 氣泡排序
1 // 外迴圈控制輪數(被遍歷屬性長度-1) 2 // 內迴圈控制每輪的次數(被遍歷屬性長度-i-1) 3 // 這個無需推導,記住規律,實際很少開發用到 4 for(var i = 0; i < str.length - 1; i++){ 5 for(var j = 0;i < str.length - i - 1; j++) 6 // TODO 7 }
20. break 和 continue
20.1 break結束所有迴圈,continue結束當前迴圈。(break理解為員工離職了,continue理解為員工請假了,但請假結束還得上班)
21. 陣列的兩種建立方式
1 var arr = [1,2,3,4,5] // 字面量 2 var arr = new Array(1,2,3,4,5) // 建立物件
22. 建立物件的三種方式
1 // 字面量 2 var obj = { 3 name:'roger', 4 age:0 5 } 6 // new 7 var obj = new Object(); 8 obj.name = 'roger' // obj['name'] = 'roger' 9 obj.age = 0 // obj['age'] = 0 10 // 建構函式 11 function Person(name,age){ 12 this.name = name 13 this.age = age 14 // 不需要return 返回結果 15 }
23. new的過程
-
在記憶體中開闢一個空間建立空物件
-
this指向這個空物件
-
執行建構函式裡的程式碼夫給這個物件新增屬性和方法
-
返回這個物件
24. 建構函式和物件的區別
-
建構函式時模板 是定義,泛指一大類,它會把物件的共有屬性和方法抽象出來封裝到函式中。
-
物件是具體的一個例項
25. JS內建物件有哪些
25.1 Math、Date
26. 遍歷陣列或物件
1 for(var i = 0; i < arr.length; i++) 2 arr.forEach((item,index) => {})) // 書寫簡單一些,但是無法中途退出迴圈 return 3 for(var key in obj){ 4 console.log(obj[key]) 5 }
27. 陣列常用方法
push、pop、shift、unshift、sort、reverse、 concat、 findIndex、find、 slice、join、 some、 every、 filter、forEach、map、reduce
28. 字串常用方法
charAt、charCodeAt、indexOf、lastIndex、split、slice,substr、substring、repeat、startsWidth、endsWith
toUpperCase、toLowerCase、trim、replace
29. 函式的三種定義方法
1 function fn() {} 2 var fn = function(){} 3 Function fn('a','b','return a + b') // 瞭解即可
30. 預解析的理解
30.1 變數名字會提升(注意只適用於var宣告的變數),函式會整體提升
31.作用域鏈的理解
-
函式內部訪問函式外部的變數的優先順序,當存在函式巢狀關係時,遵循就近原則
-
如果當前作用域的變數沒用var宣告 那麼會從父級域中找。
32. 時間戳
1 var date = +new Date() // 距離1970年到現在的毫秒數 2 var date = Date.now()
33. Math物件的使用
34.判斷變數是否是陣列的兩種方式
arr.isArray()
Object.prototype.toString.call(arr)
35.基本包裝型別
-
string,number,boolean也可以像物件一樣使用
-
當我們把它們當成物件來使用的時候,會臨時把它們包裝成物件,得到結果之後,再把這個物件銷燬
36.字串不可變的應用
-
不要頻繁+=拼接字串
-
如果涉及到拼字串的時候,思路先建立一個陣列,push,最後統一join效能更高一點
37.陣列去重的兩種方法
1 // Es6 2 var arr = [11,11,11,22,22,33,33] 3 var newArr = [...new Set(rr)] 4 5 // indexOf 根據指定的元素返回對應的索引,如果不存在返回-1 6 var arr1 = [] 7 arr.forEach(item => { 8 if(arr1.indexOf(item) == -1) return arr1.push(item) // 如果條件為假,說明陣列種已經出現過了,則不新增 9 })