js面試題(含答案)

  1. ES6新增內容有哪些
    class、
    module、
    const/let、
    箭頭函數、
    解構賦值、
    擴展運算符、
    promise

  2. 什麼是 Promise?Promise.all,Promise.race

Promise是es6中新增的對象,可以通過鏈式調用的方式解決回調地獄問題
.then接收成功的回調函數
.catch接收失敗的回調函數

then可以實現鏈式調用,回調函數的參數爲上一次then的返回值

Promise.all 接收一個Promise對象組成的數據,表示數組中所有的Promise對象都執行完之後觸發
Promise.race 接收一個Promise對象組成的數據,表示數組中只要有一個完成就結束
  1. 箭頭函數和一般函數的區別(this 指向)

  2. 如何改變 this 指向(bind,call,apply):call和apply都是改變上下文中的this並立即執行這個函數,bind方法可以讓對應的函數想什麼時候調就什麼時候調用,並且可以將參數在執行的時候添加。
    a、 call;通過在call方法,給第一個參數添加要把b添加到哪個環境中,簡單來說,this就會指向那個對象。call方法除了第一個參數以外還可以添加多個參數
    b、 apply;apply方法和call方法有些相似,它也可以改變this的指向。同樣apply也可以有多個參數,但是不同的是,第二個參數必須是一個數組
    c、 bind方法返回的是一個修改過後的函數。bind也可以有多個參數,並且參數可以執行的時候再次添加,但是要注意的是,參數是按照形參的順序進行的。

  3. 原型和原型鏈
    通過function定義的對象有一個顯式的原型prototype
    所有的對象都有一個隱式的原型__proto__

  4. 閉包一個函數的內部的函數使用了外部函數的局部變量產生的一個對象;(在函數執行完後,局部變量還會存在)

  5. 遞歸(自己調用自己)

  6. 在 js 如何和服務器端實現數據通信?
    a. ajax – XMLHttpRequest
    b. websocket
    c. form表單提交 – method; action

  7. 開發的時候如何實現數據的實時更新?
    a. websocket
    b. 輪詢(定時向服務器發送請求)

  8. 你常用的定時器實現方式有哪些?
    a. setInterval----間隔一定的事件之後調用一個方法,重複執行
    b. setTimeout----等待一段時間之後執行一個方法,只執行一次(延遲執行)
    c. requestAnimationFrame(推薦使用)----動畫幀,和顯示器的刷新頻率有關(每秒鐘60次)

  9. 你在開發的時候怎麼解決跨域問題?(不知道爲什麼前端面試會問這個問題?前端工作用不會遇到跨域問題)
    a. cors
    b. web服務器反向代理
    c. jsonp

  10. 事件傳播流程?事件阻止

    1. DOM2級事件規定事件流包括三個階段:事件捕獲階段、處於目標階段、事件冒泡階段
      1. 捕獲階段:先由文檔的根節點document往事件觸發對象,從外向內捕獲事件對象
      2. 目標階段:到達目標事件位置(事發地),觸發事件;
      3. 冒泡階段:再從目標事件位置往文檔的根節點方向回溯,從內向外冒泡事件對象。
    2. 事件阻止
//阻止瀏覽器的默認行爲 
function stopDefault( e ) { 
  //阻止默認瀏覽器動作(W3C) 
  if ( e && e.preventDefault ) 
      e.preventDefault(); 
  //IE中阻止函數器默認動作的方式 
  else
      window.event.returnValue = false; 
  return false; 
}

//阻止事件冒泡
function stopBubble(e) { 
//如果提供了事件對象,則這是一個非IE瀏覽器 
if ( e && e.stopPropagation ) 
  //因此它支持W3C的stopPropagation()方法 
  e.stopPropagation(); 
else
  //否則,我們需要使用IE的方式來取消事件冒泡 
  window.event.cancelBubble = true; 
}
  1. 事件監聽方式(on,addEventListener)有什麼區別?
    爲某元素設定事件觸發函數時,可能會覺得addEventListener和on事件的功能差不多,但是,addEventListener除了可以設置元素觸發順序外,還能多次綁定事件,因爲 on 事件多次綁定的話會出現覆蓋。

  2. 自定義事件

  3. 深拷貝和淺拷貝?(lodash)

    1. 淺拷貝: 將原對象或原數組的引用直接賦給新對象,新數組,新對象/數組只是原對象的一個引用
    2. 深拷貝: 創建一個新的對象和數組,將原對象的各項屬性的“值”(數組的所有元素)拷貝過來,是“值”而不是“引用
      a. 實現深拷貝:遞歸;
      b. 借用JSON對象的parse和stringify
  4. 本地存儲(localStorage,sessionStorage,cookies)

  5. 數組中常用的操作:(find,findIndex,filter,sort,map,forEach,reduce,splice,join,push,pop,shift,unshift…)

  6. 字符串常見操作?(replace,substring,substr,split)

  7. 對象的常見操作(.keys,for in,動態設置屬性)

  8. 常見的設計模式有哪些?(原型模式;發佈訂閱者模式;單例模式;工廠模式;組合模式)

  9. 面向對象?(封裝、繼承、多態)

    1. 封裝:隱藏對象的屬性和實現細節,僅對外提供公共訪問方式,將變化隔離,便於使用,提高複用性和安全性。
    2. 繼承:提高代碼複用性;繼承是多態的前提。
    3. 多態:父類或接口定義的引用變量可以指向子類或具體實現類的實例對象。提高了程序的拓展性。
  10. get和post區別:

    1. post相較於get更安全一些
    2. post請求的數據在請求體中進行傳遞,get在url地址中傳遞。get沒有請求體
    3. get請求每一次都是冪等的。get請求不會對數據產生副作用
    4. post請求傳遞的數據量相對於get更大。post請求傳遞的數據大小由服務器端做限制
    5. post常常用來做數據的新增
  11. rest 風格的 api(get/post/put/delete)

  12. http 請求常見狀態碼(2xx,3xx,4xx,5xx)

    1. 2XX 成功
      201 (已創建) 請求成功並且服務器創建了新的資源。
      202 (已接受) 服務器已接受請求,但尚未處理。
      203 (非授權信息) 服務器已成功處理了請求,但返回的信息可能來自另一來源。
      204 (無內容) 服務器成功處理了請求,但沒有返回任何內容。
      205 (重置內容) 服務器成功處理了請求,但沒有返回任何內容。
      206 (部分內容) 服務器成功處理了部分 GET 請求。

    2. 3XX 重定向
      301 (永久移動) 請求的網頁已永久移動到新位置。 服務器返回此響應(對 GET 或 HEAD 請求的響應)時,會自動將請求者轉到新位置。
      302 (臨時移動) 服務器目前從不同位置的網頁響應請求,但請求者應繼續使用原有位置來進行以後的請求。
      303 (查看其他位置) 請求者應當對不同的位置使用單獨的 GET 請求來檢索響應時,服務器返回此代碼。
      304 (未修改) 自從上次請求後,請求的網頁未修改過。 服務器返回此響應時,不會返回網頁內容。
      305 (使用代理) 請求者只能使用代理訪問請求的網頁。 如果服務器返回此響應,還表示請求者應使用代理。
      307 (臨時重定向) 服務器目前從不同位置的網頁響應請求,但請求者應繼續使用原有位置來進行以後的請求。

    3. 4XX 客戶端錯誤
      400:(錯誤請求) 服務器不理解請求的語法,一般是參數錯誤
      401 (未授權) 請求要求身份驗證。 對於需要登錄的網頁,服務器可能返回此響應。
      403 (禁止) 服務器拒絕請求。
      404 (未找到) 404:請求地址不存在,前端請求的接口而後臺不存在此接口。
      405 (方法禁用) 禁用請求中指定的方法。
      406 (不接受) 無法使用請求的內容特性響應請求的網頁。
      407 (需要代理授權) 此狀態代碼與 401(未授權)類似,但指定請求者應當授權使用代理。
      408 (請求超時) 服務器等候請求時發生超時。你的請求發送到該網站花的時間比該網站的服務器準備等待的時間要長,即鏈接超時。
      409 (衝突) 服務器在完成請求時發生衝突。 服務器必須在響應中包含有關衝突的信息。
      410 (已刪除) 如果請求的資源已永久刪除,服務器就會返回此響應。

    4. 5XX 服務器錯誤
      500 (服務器內部錯誤) 服務器遇到錯誤,無法完成請求。
      501 (尚未實施) 服務器不具備完成請求的功能。 例如,服務器無法識別請求方法時可能會返回此代碼。
      502 (錯誤網關) 服務器作爲網關或代理,從上游服務器收到無效響應。
      503 (服務不可用) 服務器目前無法使用(由於超載或停機維護)。 通常,這只是暫時狀態。
      504 (網關超時) 服務器作爲網關或代理,但是沒有及時從上游服務器收到請求。
      505 (HTTP 版本不受支持) 服務器不支持請求中所用的 HTTP 協議版本。

  13. http 和 https 有什麼區別?
    http(80)和https(443)的區別;端口號不一樣;
    https進行加密處理了

  14. http 請求報文?請求報文:
    請求行
    請求頭
    請求體
    請求體中的數據是有請求頭中的content-type決定

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章