63道最常見的前端面試繁雜問題及其答案
在前端面試中,各種面試題都會遇到,因此,今天我們整理了60+比較常見繁雜的面試題,希望這些面試題能夠?qū)δ阌兴鶐椭?/p>
當(dāng)然,這些面試題的答案都不是標(biāo)準(zhǔn)答案,只是對答案做了一個簡介明了的說明,希望可以快速幫助你梳理重點(diǎn)核心內(nèi)容。
這些答案可以作為參考,但是不能作為唯一標(biāo)準(zhǔn)答案,你也可以在面試時,自行補(bǔ)充。
如果有不對的地方,歡迎指出,我們一起交流學(xué)習(xí)進(jìn)步。
現(xiàn)在,讓我們以簡潔明了的方式探討這些問題的解決方案:
01、什么是事件傳播?
事件傳播是一種機(jī)制,定義事件如何傳播或穿過 DOM 樹到達(dá)其目標(biāo)以及隨后會發(fā)生什么。
02、解釋 JavaScript 中“this”的工作原理
在 JavaScript 中,“this”指的是函數(shù)的當(dāng)前執(zhí)行上下文。
03、解釋原型繼承如何工作
原型繼承允許一個對象通過建立原型鏈來繼承另一個對象的屬性。
04、null、未定義或未聲明的變量之間有什么區(qū)別?
‘null’表示故意不存在任何對象值,‘undefined’表示聲明的變量沒有賦值,未聲明的變量根本不聲明。
05、什么是閉包,以及如何/為什么使用閉包?
閉包是在函數(shù)返回后保持對函數(shù)中變量的訪問的一種方式。閉包通常用于數(shù)據(jù)隱私、封裝和創(chuàng)建具有持久狀態(tài)的函數(shù)。
06、您能否描述一下 Array.forEach() 循環(huán)和 Array.map() 方法之間的主要區(qū)別以及為什么您會選擇其中一種方法?
主要區(qū)別在于 Array.forEach() 迭代數(shù)組的每個元素并對每個元素執(zhí)行操作,但它不返回新數(shù)組。
另一方面,Array.map() 通過將函數(shù)應(yīng)用于原始數(shù)組的每個元素來創(chuàng)建新數(shù)組。當(dāng)您想要對每個元素執(zhí)行操作而不返回新數(shù)組時,您可以選擇 Array.forEach() ;當(dāng)您需要將數(shù)組轉(zhuǎn)換為新數(shù)組時,您可以選擇 Array.map() 。
07、call和apply有什么區(qū)別?
call 和 apply 都用于更改函數(shù)的“this”作用域。主要區(qū)別在于如何將參數(shù)傳遞給函數(shù)。在 call 中,后續(xù)參數(shù)是單獨(dú)傳遞的,而 apply 期望第二個參數(shù)是一個數(shù)組,該數(shù)組被解包為被調(diào)用函數(shù)的參數(shù)。
08、什么是hoisting?
Hoisting是 JavaScript 在編譯階段將變量和函數(shù)聲明移動到各自作用域頂部的過程。這允許在代碼中聲明變量和函數(shù)之前使用它們。
09、描述事件冒泡
事件冒泡是一種機(jī)制,其中內(nèi)部元素中發(fā)生的事件通過 DOM 層次結(jié)構(gòu)中的父元素傳播或“冒泡”。它從最里面的元素開始,一直持續(xù)到文檔級別,一路觸發(fā)附加到每個父元素的事件處理程序。
10、解釋事件委托
事件委托是一種技術(shù),您無需將事件偵聽器附加到各個元素,而是將單個事件偵聽器附加到將為其子元素處理事件的父元素。當(dāng)您有大量元素或動態(tài)添加元素時,此方法非常有用,因為它可以提高性能并減少內(nèi)存消耗。
11、CORS 代表什么以及它解決什么問題?
CORS 代表跨源資源共享。它是一種機(jī)制,允許從資源來源域之外的另一個域請求網(wǎng)頁上的資源。CORS 解決了瀏覽器強(qiáng)制執(zhí)行的同源策略,該策略可防止腳本出于安全原因向不同域發(fā)出請求。
12、Prop 和 State 有什么區(qū)別?
props 和 state 都是 React 組件中使用的普通 JavaScript 對象。props 從父組件傳遞到子組件,用于組件內(nèi)不會更改的數(shù)據(jù)。另一方面,狀態(tài)在組件本身內(nèi)進(jìn)行管理,并且可以使用 setState 方法進(jìn)行更新。props 是不可變的,而 state 可以更新。
13、React 組件中有哪些生命周期方法?
React 組件中的一些常見生命周期方法包括 componentDidMount、componentWillMount、componentWillUpdate、componentDidUpdate、shouldComponentUpdate 和 componentWillReceiveProps。
這些方法允許您在組件生命周期的不同階段執(zhí)行操作,例如初始化數(shù)據(jù)、更新 UI 或處理 prop 更改。
14、解釋一下 function Person(){}、var person = Person() 和 var person = new Person() 之間的區(qū)別。
function Person(){} 正在聲明一個函數(shù)。
var person = Person() 將 Person 函數(shù)的引用分配給 person 變量。
var person = new Person() 使用“new”關(guān)鍵字創(chuàng)建 Person 類的新實(shí)例。
15、剩余運(yùn)算符和擴(kuò)展運(yùn)算符有什么區(qū)別?
剩余運(yùn)算符(例如,…args)允許您將不定數(shù)量的參數(shù)表示為數(shù)組。當(dāng)使用可變參數(shù)函數(shù)或處理可變數(shù)量的函數(shù)參數(shù)時,它非常有用。
擴(kuò)展運(yùn)算符(例如,...array)允許您將數(shù)組擴(kuò)展為單個元素。當(dāng)您想要將數(shù)組作為單獨(dú)的參數(shù)傳遞給函數(shù)或基于現(xiàn)有數(shù)組創(chuàng)建新數(shù)組時,它會很方便。
16、解釋let、var和const之間的區(qū)別
let 和 const 是在 ES6 中引入的,而 var 從 JavaScript 的早期版本開始就可用了。
let 和 const 具有塊作用域,這意味著它們僅限于聲明它們的塊(例如,在大括號內(nèi))。var 具有函數(shù)作用域,這意味著它可以在聲明它的整個函數(shù)中訪問。
const 與 let 類似,但用于在初始分配后不應(yīng)重新分配的變量。
17、“重置”和“規(guī)范化”CSS 有什么區(qū)別?你會選擇哪個,為什么?
重置 CSS 會刪除每個元素的所有樣式,包括邊距、填充和其他屬性。它提供了一個干凈的狀態(tài),并確保不同瀏覽器之間的啟動樣式一致。
規(guī)范化 CSS 的目的是通過應(yīng)用一組預(yù)定義的樣式,使元素在瀏覽器中呈現(xiàn)一致。它為樣式提供了一致的基線,并有助于減少瀏覽器的不一致。
重置 CSS 還是規(guī)范化 CSS 之間的選擇取決于項目的要求和偏好。重置使您可以完全控制樣式,但需要重新設(shè)置每個元素的樣式。
規(guī)范化提供了更一致的基礎(chǔ),但可能需要額外的自定義才能滿足您的設(shè)計要求。
18、描述塊格式化上下文 (BFC) 及其工作原理
塊格式上下文 (BFC) 是網(wǎng)頁視覺 CSS 渲染的一部分。它是塊級盒子布局發(fā)生的區(qū)域,并且浮動體彼此交互。
當(dāng)某些 CSS 屬性(例如浮動、位置、溢出和顯示)應(yīng)用于元素時,就會創(chuàng)建 BFC。BFC 有助于實(shí)現(xiàn)可預(yù)測且一致的布局,特別是在處理復(fù)雜的定位和浮動元素時。
19、匿名函數(shù)的典型用例是什么?
匿名函數(shù),也稱為函數(shù)表達(dá)式,是在沒有指定名稱的情況下定義的函數(shù)。它們通常用于需要一個函數(shù)作為另一個函數(shù)的參數(shù)的情況或創(chuàng)建自調(diào)用函數(shù)時。
匿名函數(shù)允許更簡潔的代碼,并且可以通過使函數(shù)定義更接近其用法來幫助提高代碼可讀性。
20、“屬性”和“屬性”有什么區(qū)別?
屬性用于定義 HTML 元素的特征,例如 id 和類。另一方面,屬性會更新 DOM 元素本身,例如其類型或值。
21、宿主對象和本機(jī)對象有什么區(qū)別?
宿主對象由環(huán)境提供,例如瀏覽器中的窗口或文檔對象。本機(jī)對象(如數(shù)組或字符串)是 ECMAScript 規(guī)范的一部分,它們的行為由語言本身定義。
22、解釋可變對象和不可變對象之間的區(qū)別。JavaScript 中不可變對象的示例是什么?不變性的優(yōu)點(diǎn)和缺點(diǎn)是什么?如何在自己的代碼中實(shí)現(xiàn)不變性?
可變對象可以隨著時間的推移改變其狀態(tài),而不可變對象在創(chuàng)建后不能修改。JavaScript 中不可變對象的一個例子是字符串。
不變性的優(yōu)點(diǎn)包括更簡單的代碼和更容易的調(diào)試,而缺點(diǎn)包括潛在的內(nèi)存開銷。不變性可以通過避免直接修改并使用對象克隆或函數(shù)式編程等技術(shù)來實(shí)現(xiàn)。
23、解釋同步函數(shù)和異步函數(shù)之間的區(qū)別。
同步函數(shù)逐步執(zhí)行,每一行都等待前一行完成。異步函數(shù)允許在上一步完成之前執(zhí)行到下一步。異步函數(shù)通常用于非阻塞操作。
24、什么是事件循環(huán)?調(diào)用堆棧和任務(wù)隊列有什么區(qū)別?
事件循環(huán)負(fù)責(zé)利用單個線程執(zhí)行 JavaScript 中的操作。它使用調(diào)用堆棧來跟蹤當(dāng)前正在執(zhí)行的操作,并使用任務(wù)隊列來管理異步任務(wù)。調(diào)用堆棧按照后進(jìn)先出的順序處理函數(shù),而任務(wù)隊列則按照先進(jìn)先出的順序處理。
25、高階函數(shù)的定義是什么?
高階函數(shù)是一種采用一個或多個函數(shù)作為參數(shù)和/或返回一個函數(shù)作為其結(jié)果的函數(shù)。它允許編程具有更大的靈活性和模塊化。
26、經(jīng)典繼承和原型繼承有什么區(qū)別?
經(jīng)典繼承涉及從類繼承的實(shí)例,創(chuàng)建基于類的分層系統(tǒng)。另一方面,原型繼承涉及直接從其他對象繼承的實(shí)例。它允許通過組合多個對象來選擇性繼承和組合。
27、函數(shù)式編程與面向?qū)ο缶幊滔啾扔泻蝺?yōu)缺點(diǎn)?
函數(shù)式編程避免共享狀態(tài)和可變數(shù)據(jù),使代碼更易于閱讀和調(diào)試。面向?qū)ο缶幊桃蕾囉诠蚕淼闹鳡顟B(tài),這可能會導(dǎo)致復(fù)雜性。
函數(shù)式編程還促進(jìn)不變性并支持高階函數(shù),而面向?qū)ο缶幊虅t強(qiáng)調(diào)封裝和多態(tài)性。
28、什么是詞法范圍?
詞法作用域是指函數(shù)訪問在其自身作用域之外定義的變量的能力。在外部或上部作用域中定義的變量在函數(shù)內(nèi)部自動可用,無需將它們作為參數(shù)傳遞。
29、與對象相比,使用 ES6 映射有哪些優(yōu)點(diǎn)?在數(shù)組上使用 ES6 集怎么樣?
ES6 映射提供了一些優(yōu)勢,例如支持任何數(shù)據(jù)類型作為鍵、內(nèi)置大小跟蹤、迭代和順序保存。ES6 集合提供了自動重復(fù)消除、高效的成員資格測試、順序獨(dú)立性和方便的集合操作等優(yōu)點(diǎn)。
30、集合與數(shù)組有什么區(qū)別?
集合不能包含重復(fù)值,而數(shù)組可以。當(dāng)唯一性很重要時,集合很有用。
31、你能舉一個解構(gòu)對象或數(shù)組的例子嗎?
解構(gòu)允許您將對象或數(shù)組中的值提取到不同的變量中。例如:解構(gòu)允許您將對象或數(shù)組中的值提取到不同的變量中。例如:
const { firstName, lastName } = person;
const [firstItem, secondItem] = array;
32、你能舉一個使用 ES6 模板文字生成字符串的例子嗎?
模板文字允許輕松的字符串插值和多行字符串。例如:
const name = ‘John’;
const greeting = `Hello ${name}!`;
顯示柯里函數(shù)的示例
柯里化是一種允許您創(chuàng)建函數(shù)鏈的技術(shù),每個函數(shù)都采用參數(shù)的子集。例如:
const foo = (a) => (b) => ? => console.log(`Hey ${a} $ ${c}!`);
foo('hey')('bar')('yo');
33、ES2015 和 ES6 有什么區(qū)別?
ES6 是一個較舊的術(shù)語,指的是 ECMAScript 的第 6 版,而 ES2015 特指該版本中引入的功能。它們經(jīng)?;Q使用。
34、單元測試和功能/集成測試有什么區(qū)別?
單元測試側(cè)重于測試小的、獨(dú)立的代碼單元,例如單個函數(shù)。它有助于確保各個單元的正確性。
另一方面,功能/集成測試測試多個組件協(xié)同工作的交互和行為,模擬真實(shí)場景。
35、代碼風(fēng)格 linting 工具的目的是什么?
代碼風(fēng)格 linting 工具(例如 ESLint)有助于強(qiáng)制實(shí)施一致的編碼風(fēng)格并捕獲潛在的錯誤或代碼異味。它提高了代碼質(zhì)量、可讀性和可維護(hù)性。
36、您能解釋一下從您輸入網(wǎng)站 URL 到其在屏幕上完成加載的整個過程嗎?會發(fā)生什么?
當(dāng)您輸入網(wǎng)站的 URL 時,瀏覽器會執(zhí)行一系列步驟,包括 DNS 解析、建立 TCP 連接、發(fā)送 HTTP 請求、接收 HTTP 響應(yīng)、解析和渲染網(wǎng)站內(nèi)容以及加載其他資源(如果需要)。
37、您能說出對于 JavaScript 應(yīng)用程序來說很重要的兩種編程范例嗎
原型繼承和函數(shù)式編程是 JavaScript 中兩個重要的編程范式。
38、什么是函數(shù)式編程?
函數(shù)式編程是一種專注于使用純函數(shù)并避免共享狀態(tài)和可變數(shù)據(jù)的編程范例。它促進(jìn)不變性并強(qiáng)調(diào)高階函數(shù)的使用。
39、PureComponent 是什么以及如何利用它?
PureComponent 是 React.Component 的子類,它實(shí)現(xiàn)了帶有淺層 prop 和狀態(tài)比較的 shouldComponentUpdate 方法。
當(dāng) props 和 state 沒有改變時,它可以防止不必要的組件重新渲染,從而幫助優(yōu)化性能。
40、什么是高階組件 (HOC)?如何在實(shí)踐中使用它們?
高階組件 (HOC) 是采用組件并返回該組件的增強(qiáng)版本的函數(shù)。它們支持代碼重用、邏輯抽象,并為組件提供附加功能。HOC 是使用接受組件作為參數(shù)并返回新組件的函數(shù)創(chuàng)建的。
41、您對 React 的最新更新有何看法 - 回顧一下 React Hooks 的優(yōu)點(diǎn)和用途。
React Hooks 引入了一種在功能組件中編寫可重用和有狀態(tài)邏輯的新方法。它們簡化了組件組合,減少了對類組件的需求,并通過允許在不編寫類的情況下使用狀態(tài)和其他 React 功能來提高代碼的可讀性和可維護(hù)性。
42、虛擬 DOM 和 Shadow DOM 實(shí)現(xiàn)。React 協(xié)調(diào)是如何工作的?
React 使用虛擬 DOM 來高效地更新和渲染組件。它創(chuàng)建實(shí)際 DOM 的輕量級表示,并執(zhí)行比較算法來確定更新真實(shí) DOM 所需的最小更改集。React 的協(xié)調(diào)過程使虛擬 DOM 更改與實(shí)際 DOM 保持一致,從而優(yōu)化渲染。
43、如何擴(kuò)展網(wǎng)站?
擴(kuò)展網(wǎng)站涉及各種策略,例如優(yōu)化代碼和資產(chǎn)、實(shí)施緩存機(jī)制、利用內(nèi)容交付網(wǎng)絡(luò) (CDN)、負(fù)載平衡以及通過添加更多服務(wù)器進(jìn)行水平擴(kuò)展。此外,數(shù)據(jù)庫優(yōu)化、高效的資源利用和性能監(jiān)控對于擴(kuò)展網(wǎng)站至關(guān)重要。
44、JavaScript 中的 polyfill 是什么?
Polyfill 是一段代碼,可以在本機(jī)不支持它的舊瀏覽器上提供現(xiàn)代功能。它通過使用 JavaScript 實(shí)現(xiàn)缺失的功能或 API 來填補(bǔ)瀏覽器兼容性方面的空白。Polyfill 允許開發(fā)人員使用最新標(biāo)準(zhǔn)編寫代碼,同時確保向后兼容性。
45、“use strict”有什么作用?
“use strict”是一個啟用嚴(yán)格模式的 JavaScript 指令。當(dāng)在腳本或函數(shù)的開頭使用時,它會強(qiáng)制執(zhí)行更嚴(yán)格的規(guī)則并防止常見錯誤。嚴(yán)格模式會禁用某些容易出錯的功能,幫助捕獲無聲錯誤,并促進(jìn)更安全、更可靠的代碼。
46、塊元素和行內(nèi)元素有什么區(qū)別?
塊元素被格式化為塊并從新行開始,占據(jù)可用的整個寬度。它們可以應(yīng)用寬度、高度、邊距和填充屬性。
內(nèi)聯(lián)元素在文本流中格式化,并且不從新行開始。它們僅根據(jù)其內(nèi)容占用必要的空間,并且不能應(yīng)用寬度、高度或邊距。
47、使用 typeof、instanceof 和 Object.prototype.toString 解釋類型強(qiáng)制。
類型強(qiáng)制是 JavaScript 中值從一種類型自動轉(zhuǎn)換為另一種類型。typeof 是一個一元運(yùn)算符,它返回一個指示操作數(shù)類型的字符串。instanceof 用于檢查對象是否是特定構(gòu)造函數(shù)的實(shí)例。
Object.prototype.toString 是一種返回對象類型的字符串表示形式的方法。
48、回流焊和重涂有什么區(qū)別?
當(dāng)對元素的樣式進(jìn)行不影響其布局的更改(例如更改背景顏色)時,就會發(fā)生重繪。重繪相對較快,因為它們只涉及重繪像素。
另一方面,當(dāng)對元素的布局進(jìn)行更改(例如更改其尺寸或位置)時,就會發(fā)生重排?;亓鞯挠嬎愠杀靖撸驗樗鼈兩婕爸匦掠嬎闶苡绊懺氐牟季?。
49、什么是關(guān)鍵渲染路徑?
關(guān)鍵渲染路徑是指瀏覽器渲染網(wǎng)頁所采取的步驟順序。它包括解析 HTML、構(gòu)建 DOM 樹、渲染 CSSOM、執(zhí)行布局以及在屏幕上繪制像素。優(yōu)化關(guān)鍵渲染路徑有助于提高頁面的加載和渲染性能。
50、如何使用 Web API 在 div 元素內(nèi)添加 span 元素?
您可以使用 DOM API 的“createElement”和“appendChild”方法創(chuàng)建新的“span”元素并將其作為子元素附加到“div”元素。
const divElement = document.createElement(‘div’);
const spanElement = document.createElement(‘span’);
divElement.appendChild(spanElement);
51、CSS 預(yù)處理器 SASS/LESS 有何用途?
SASS 和 LESS 等 CSS 預(yù)處理器用于通過添加變量、mixins、嵌套和函數(shù)等功能來增強(qiáng) CSS 的功能。它們允許更高效和模塊化的 CSS 開發(fā),從而實(shí)現(xiàn)代碼重用、改進(jìn)的組織和更輕松的維護(hù)。
52、事件循環(huán)如何處理微觀和宏觀任務(wù)?
事件循環(huán)負(fù)責(zé)處理 JavaScript 中的微任務(wù)和宏任務(wù)。在事件循環(huán)的每次迭代期間,它首先處理所有微任務(wù)(例如 Promise 和排隊回調(diào)),然后再繼續(xù)處理下一個宏任務(wù)。
這確保了微任務(wù)具有更高的優(yōu)先級,并在下一次渲染或 I/O 操作之前執(zhí)行。
53、如何識別瀏覽器中的內(nèi)存泄漏?
識別瀏覽器中的內(nèi)存泄漏涉及監(jiān)視一段時間內(nèi)的內(nèi)存使用情況并分析堆快照。Chrome DevTools 等工具提供內(nèi)存分析功能來跟蹤內(nèi)存分配、檢測未使用的對象以及識別可能指示內(nèi)存泄漏的長生命周期對象。
54、HTTP GET 和 POST 請求有什么區(qū)別?
HTTP GET 和 POST 請求都用于將數(shù)據(jù)從客戶端傳輸?shù)椒?wù)器。但是,GET 請求包括附加到 URL 的請求參數(shù),而 POST 請求包括消息正文中的請求參數(shù)。POST 請求對于傳輸敏感數(shù)據(jù)更加安全,因為參數(shù)在 URL 中不直接可見。
55、什么時候經(jīng)典繼承是合適的選擇?
經(jīng)典繼承通常用在像 Java 或 C# 這樣的語言中,這些語言需要嚴(yán)格的類層次結(jié)構(gòu),并且對象之間的關(guān)系是固定的和層次化的。當(dāng)設(shè)計具有明確定義的類結(jié)構(gòu)和繼承關(guān)系的復(fù)雜系統(tǒng)時,它可能是合適的。
56、什么時候原型繼承是合適的選擇?
當(dāng)靈活性和對象組合比嚴(yán)格的類層次結(jié)構(gòu)更重要時,原型繼承適用。它允許對象直接從其他對象繼承,從而促進(jìn)代碼重用、選擇性繼承和動態(tài)對象創(chuàng)建。由于其靈活和動態(tài)的特性,原型繼承在 JavaScript 中被廣泛使用。
57、使用回調(diào)、promise、await 和 async 處理異步調(diào)用。使用每種方法來處理異步調(diào)用有何優(yōu)缺點(diǎn)?
回調(diào)提供了處理異步調(diào)用的傳統(tǒng)方法,但可能導(dǎo)致回調(diào)地獄并使代碼難以閱讀。Promise 提供了更簡潔的語法,并允許通過鏈接和 catch 塊等功能更好地處理錯誤。Async/await 是最近添加的功能,它通過使用異步函數(shù)和等待 Promise 來簡化異步代碼,使代碼看起來更加同步且更易于理解。
58、何時使用函數(shù)聲明和表達(dá)式?
函數(shù)聲明被提升并可以在代碼中的聲明之前使用,這使得它們適合一般函數(shù)定義。另一方面,函數(shù)表達(dá)式不會被提升,可以分配給變量或作為參數(shù)傳遞給其他函數(shù),這使得它們對于創(chuàng)建匿名函數(shù)或回調(diào)非常有用。
59、什么是前端語義標(biāo)記?
語義標(biāo)記是指使用 HTML 元素向瀏覽器和開發(fā)人員傳達(dá)含義和結(jié)構(gòu)。它涉及選擇適當(dāng)?shù)?HTML 標(biāo)簽(例如“<header>”、“<nav>”、“<section>”、“<article>”等)來表示頁面上元素的內(nèi)容和用途。
語義標(biāo)記提高了可訪問性、搜索引擎優(yōu)化和代碼可讀性。
60、您能解釋一下標(biāo)簽屬性,例如“disabled”、“async”、“defer”以及何時使用“data-*”嗎?
“disabled”屬性用于禁用元素,防止用戶交互。`async` 和 `defer` 屬性與腳本標(biāo)簽一起使用來控制外部腳本的執(zhí)行時間。
`async` 屬性允許腳本異步執(zhí)行,而 `defer` 屬性則推遲執(zhí)行,直到文檔解析完成?!癲ata-*”屬性用于存儲與元素關(guān)聯(lián)的自定義數(shù)據(jù)屬性,提供了一種無需使用非標(biāo)準(zhǔn)屬性或類即可存儲附加信息的方法。
61、您能否談?wù)勄岸碎_發(fā)的可訪問性問題,例如確保輸入復(fù)選框具有更大的響應(yīng)區(qū)域(使用標(biāo)簽“for”),以及使用“按鈕”、“演示文稿”等角色?
前端開發(fā)中的可訪問性問題涉及確保用戶界面對殘疾人可用且可訪問。這包括提供正確的鍵盤導(dǎo)航、使用語義 HTML 元素、提供圖像的替代文本以及使用 ARIA 屬性和角色向輔助技術(shù)傳達(dá)元素的正確含義和行為。
62、“Object.create”和“new”有什么區(qū)別?
`Object.create` 和 `new` 之間的區(qū)別在于它們?nèi)绾蝿?chuàng)建和初始化對象。`Object.create(proto)` 使用指定的原型對象創(chuàng)建一個新對象,而不調(diào)用構(gòu)造函數(shù)。
另一方面,“new Constructor()”創(chuàng)建一個新對象,調(diào)用構(gòu)造函數(shù),將新創(chuàng)建的對象設(shè)置為構(gòu)造函數(shù)中“this”的值,并返回新創(chuàng)建的對象。
雖然本文提供了一般性的高級指南,但深入研究底層低級材料的細(xì)節(jié)至關(guān)重要。
為了全面了解,我強(qiáng)烈建議使用 frontendlead.com。該平臺提供廣泛的面試問題以及高質(zhì)量的解決方案,包括詳細(xì)的視頻。
此外,它還提供了對特定公司常見問題的見解。通過利用 frontendlead.com,您可以增強(qiáng)您的知識并為前端工程面試做好充分準(zhǔn)備。
63、您能描述一下漸進(jìn)增強(qiáng)和優(yōu)雅降級之間的區(qū)別嗎?
漸進(jìn)增強(qiáng)從所有瀏覽器都可以提供的基本用戶體驗開始,并針對現(xiàn)代瀏覽器進(jìn)行增強(qiáng)。
另一方面,優(yōu)雅降級從豐富的體驗開始,并為舊瀏覽器優(yōu)雅降級。
最后
以上就是我今天這篇文章中與您分享的全部內(nèi)容,希望對您有所幫助。
最后,感謝您的閱讀,祝編程愉快!