js

1. JS由哪三部分組成?

  • ECMAScript:核心語法和規(guī)則
  • DOM(文檔對象模型):操作HTML文檔的接口
  • BOM(瀏覽器對象模型):與瀏覽器交互的接口

2. JS有哪些內(nèi)置對象?

  • 基本對象:Object、Function、Array、String、Number、Boolean、Date、RegExp
  • 錯誤對象:Error、EvalError、RangeError等
  • 全局對象:Math、JSON
  • 其他:Symbol、Map、Set、Promise等

3. 操作數(shù)組的方法有哪些?

  • 修改原數(shù)組:push、pop、shift、unshift、splice、sort、reverse
  • 不修改原數(shù)組:concat、slice、map、filter、reduce、forEach
  • 查找:indexOf、lastIndexOf、find、findIndex

4. JS對數(shù)據(jù)類型的檢測方式有哪些?

  • typeof:檢測基本數(shù)據(jù)類型
  • instanceof:檢測對象類型
  • constructor:通過構(gòu)造函數(shù)判斷
  • Object.prototype.toString.call():最準(zhǔn)確的檢測方法

5. 說一下閉包,閉包有什么特點(diǎn)?

  • 定義:函數(shù)可以訪問并操作其外部作用域中的變量
  • 特點(diǎn)
    • 可以訪問外部函數(shù)的變量
    • 變量不會被垃圾回收
    • 可以創(chuàng)建私有變量

6. 前端的內(nèi)存泄漏怎么理解?

  • 定義:程序中已動態(tài)分配的堆內(nèi)存由于某種原因未釋放或無法釋放
  • 常見原因
    • 意外的全局變量
    • 被遺忘的定時器
    • 未清理的DOM引用
    • 閉包使用不當(dāng)

7. 事件委托是什么?

  • 概念:利用事件冒泡機(jī)制,將事件監(jiān)聽器添加到父元素上,通過事件冒泡來處理子元素的事件
  • 優(yōu)點(diǎn):減少內(nèi)存占用、動態(tài)綁定事件

8. 基本數(shù)據(jù)類型和引用數(shù)據(jù)類型的區(qū)別?

  • 基本類型:存儲在棧中,值不可變,賦值時拷貝值
  • 引用類型:存儲在堆中,賦值時拷貝引用地址

9. 說一下原型鏈。

  • 概念:每個對象都有一個內(nèi)部屬性[[Prototype]],指向其原型對象,形成鏈?zhǔn)浇Y(jié)構(gòu)
  • 作用:實(shí)現(xiàn)屬性和方法的繼承

10. new操作符具體做了什么?

  1. 創(chuàng)建一個空對象
  2. 設(shè)置原型鏈
  3. 執(zhí)行構(gòu)造函數(shù)
  4. 返回對象

11. JS是如何實(shí)現(xiàn)繼承的?

  • 原型鏈繼承
  • 構(gòu)造函數(shù)繼承
  • 組合繼承
  • 寄生組合繼承
  • ES6 Class繼承

12. JS的設(shè)計(jì)原理是什么?

  • 基于原型的面向?qū)ο?/li>
  • 單線程事件循環(huán)
  • 動態(tài)類型
  • 函數(shù)是一等公民

13. JS中關(guān)于this指向的問題

  • 全局環(huán)境:指向全局對象
  • 函數(shù)調(diào)用:非嚴(yán)格模式指向全局對象,嚴(yán)格模式為undefined
  • 對象方法:指向調(diào)用對象
  • 構(gòu)造函數(shù):指向?qū)嵗龑ο?/li>
  • 箭頭函數(shù):繼承外層作用域的this

14. script標(biāo)簽里的async和defer有什么區(qū)別?

  • async:異步加載,加載完立即執(zhí)行
  • defer:異步加載,等待DOM解析完成后執(zhí)行

15. setTimeout最小執(zhí)行時間是多少?

  • HTML5標(biāo)準(zhǔn)規(guī)定為4ms,但實(shí)際瀏覽器實(shí)現(xiàn)可能不同

16. ES6和ES5有什么區(qū)別?

  • ES6引入了let/const、箭頭函數(shù)、類、模塊等新特性
  • 語法更簡潔,功能更強(qiáng)大

17. ES6的新特性有哪些?

  • let/const
  • 箭頭函數(shù)
  • 模板字符串
  • 解構(gòu)賦值
  • Promise
  • Class
  • Module

18. call, apply, bind三者有什么區(qū)別?

  • call:立即執(zhí)行,參數(shù)逐個傳遞
  • apply:立即執(zhí)行,參數(shù)以數(shù)組形式傳遞
  • bind:返回新函數(shù),不立即執(zhí)行

19. 用遞歸的時候有沒有遇到什么問題?

  • 棧溢出
  • 重復(fù)計(jì)算
  • 性能問題

20. 如何實(shí)現(xiàn)一個深拷貝?

// 使用JSON.parse(JSON.stringify())
// 使用遞歸實(shí)現(xiàn)
// 使用lodash的cloneDeep

21. 說一下事件循環(huán)。

  • 概念:JavaScript處理異步任務(wù)的機(jī)制
  • 流程:執(zhí)行棧 → 微任務(wù)隊(duì)列 → 宏任務(wù)隊(duì)列

22. ajax是什么?怎么實(shí)現(xiàn)的?

  • 定義:異步JavaScript和XML,用于在后臺與服務(wù)器交換數(shù)據(jù)
  • 實(shí)現(xiàn):XMLHttpRequest或fetch API

23. get和post有什么區(qū)別?

  • GET:參數(shù)在URL中,長度限制,可緩存
  • POST:參數(shù)在請求體中,無長度限制,不可緩存

24. promise的內(nèi)部原理是什么?它的優(yōu)缺點(diǎn)是什么?

  • 原理:狀態(tài)機(jī)(pending、fulfilled、rejected)
  • 優(yōu)點(diǎn):解決回調(diào)地獄
  • 缺點(diǎn):無法取消,錯誤處理復(fù)雜

25. promise和async await的區(qū)別是什么?

  • Promise:鏈?zhǔn)秸{(diào)用
  • async/await:同步寫法,更易讀

26. 瀏覽器的存儲方式有哪些?

  • localStorage
  • sessionStorage
  • cookie
  • indexedDB

27. token存在sessionstorage還是localstorage?

  • 通常存在localStorage中,但需考慮安全因素

28. token的登錄流程。

  1. 用戶登錄
  2. 服務(wù)器驗(yàn)證并返回token
  3. 客戶端存儲token
  4. 后續(xù)請求攜帶token

29. 頁面渲染的過程是怎樣的?

  1. 解析HTML構(gòu)建DOM樹
  2. 解析CSS構(gòu)建樣式樹
  3. 合并DOM樹和樣式樹構(gòu)建渲染樹
  4. 布局計(jì)算
  5. 繪制

30. DOM樹和渲染樹有什么區(qū)別?

  • DOM樹:完整的HTML結(jié)構(gòu)
  • 渲染樹:只包含可見元素,包含樣式信息

31. 精靈圖和base64的區(qū)別是什么?

  • 精靈圖:將多個小圖合并為一張大圖
  • base64:將圖片轉(zhuǎn)換為文本編碼

32. svg格式了解多少?

  • 矢量圖形格式
  • 基于XML
  • 可縮放不失真
  • 支持動畫和交互

33. 了解過JWT嗎?

  • 定義:JSON Web Token,用于身份驗(yàn)證
  • 結(jié)構(gòu):頭部.載荷.簽名

34. npm的底層環(huán)境是什么?

  • 基于Node.js的包管理器

35. HTTP協(xié)議規(guī)定的協(xié)議頭和請求頭有什么?

  • 請求頭:User-Agent、Content-Type等
  • 響應(yīng)頭:Content-Type、Cache-Control等

36. 說一下瀏覽器的緩存策略。

  • 強(qiáng)緩存:Expires、Cache-Control
  • 協(xié)商緩存:Last-Modified/If-Modified-Since、ETag/If-None-Match

37. 說一下什么是"同源策略"?

  • 定義:協(xié)議、域名、端口都相同才允許通信
  • 目的:防止惡意網(wǎng)站竊取數(shù)據(jù)

38. 防抖和節(jié)流是什么?

  • 防抖:事件觸發(fā)后延遲執(zhí)行,新事件會重置延遲
  • 節(jié)流:固定時間間隔內(nèi)只執(zhí)行一次

39. 解釋一下什么是json?

  • 定義:JavaScript對象表示法,輕量級數(shù)據(jù)交換格式
  • 特點(diǎn):易于人閱讀和編寫,機(jī)器解析和生成

40. 當(dāng)數(shù)據(jù)沒有請求過來的時候,該怎么做?

  • 顯示loading狀態(tài)
  • 提供默認(rèn)值
  • 錯誤處理和重試機(jī)制

41. 有沒有做過無感登錄?

  • 通過token自動刷新實(shí)現(xiàn)
  • 利用localStorage存儲用戶信息

42. 大文件上傳是怎么做的?

  • 分片上傳
  • 斷點(diǎn)續(xù)傳
  • 并行上傳多個分片
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容