JS基礎面試

瑪麗喬亞發表於2021-11-02

1. JS是高階語言弱型別語言 指令碼語言

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 })

 

相關文章