前端面試題23-34

23. 說說你對 Promise 的理解

Promise 是 ECMAScript6 引入的一種異步編程解決方案,用于處理異步操作。它表示一個尚未完成但最終會結束的操作,具有三種狀態:pending(進行中)、fulfilled(已完成)和 rejected(已拒絕)。Promise 使得異步代碼更具可讀性和可維護性,避免了傳統回調函數嵌套帶來的“回調地獄”問題。通過鏈式調用 then()catch() 方法,可以更加優雅地處理異步操作的結果和錯誤。

24. Promise 的構造函數

Promise 的構造函數接受一個執行函數(executor),該函數包含兩個參數:resolverejectresolve 用于將 Promise 狀態從 pending 變為 fulfilled,并傳遞結果;reject 用于將 Promise 狀態從 pending 變為 rejected,并傳遞錯誤信息。示例如下:

const promise = new Promise((resolve, reject) => {// 異步操作if (/* 操作成功 */) {resolve(value);} else {reject(error);}
});

25. 談一談你了解 ECMAScript6 的新特性?

ECMAScript6(ES6)引入了許多新特性,包括但不限于:

  • 塊級作用域聲明letconst
  • 箭頭函數=>,簡化函數定義并自動綁定 this
  • 模板字符串:使用反引號(``)和內嵌表達式 ${}
  • 解構賦值:從數組和對象中提取值并賦給變量
  • class,面向對象編程的新語法
  • 模塊importexport,實現模塊化
  • 默認參數:為函數參數設置默認值
  • Promise:用于處理異步操作
  • Symbol:一種新的原始數據類型,表示獨一無二的值

26. Object.is() 與原來的比較操作符 = 的區別?

Object.is() 用于判斷兩個值是否嚴格相等,與 === 類似,但在以下兩種情況下有區別:

  • Object.is(NaN, NaN) 返回 true,而 NaN === NaN 返回 false
  • Object.is(+0, -0) 返回 false,而 +0 === -0 返回 true

== 是寬松相等比較,會進行類型轉換,而 === 是嚴格相等比較,不會進行類型轉換。

27. 什么是 Babel

Babel 是一個 JavaScript 編譯器,用于將現代的 ES6/ES2015+ 代碼轉換為向后兼容的 ES5 代碼,以便在不支持最新標準的環境中運行。Babel 允許開發者使用最新的 JavaScript 特性,而不必擔心瀏覽器兼容性問題。它支持插件和預設,能夠擴展和定制編譯過程。

28. Symbol 有什么用處

Symbol 是 ES6 引入的一種新的原始數據類型,表示獨一無二的值。主要用途包括:

  • 作為對象屬性的鍵,避免屬性名沖突
  • 創建不可枚舉的屬性,隱藏內部實現細節
  • 實現迭代器(iterator)接口

每個 Symbol 都是唯一的,即使使用相同的描述符創建,也不會相等。

29. 模塊化

模塊化是將代碼分割成獨立且可重用的模塊的編程技術。ES6 提供了原生模塊系統,通過 importexport 關鍵字實現模塊的引入和導出。模塊化有助于提高代碼的可維護性和可讀性,支持按需加載,減少命名沖突。

// module.js
export const name = 'Module';
export function greet() {console.log('Hello from module');
}// main.js
import { name, greet } from './module.js';
greet(); // 輸出 'Hello from module'

30. 箭頭函數的特點

箭頭函數是 ES6 引入的簡潔函數定義方式,具有以下特點:

  • 使用 => 語法
  • 沒有自己的 this,它會捕獲上下文的 this
  • 沒有 arguments 對象,可以使用 rest 參數 ... 替代
  • 無法通過 new 關鍵字調用,沒有 prototype 屬性
const add = (a, b) => a + b;

31. ES5 / ES6 的繼承除了寫法以外還有什么區別

除了寫法上的差異,ES6 繼承相較于 ES5 繼承具有以下優勢:

  • 更加直觀和簡潔:使用 classextends 關鍵字,使得繼承關系更加清晰
  • super 關鍵字:調用父類構造函數和方法,簡化了繼承邏輯
  • 內建的類語法:避免了 ES5 中通過原型鏈實現繼承的復雜性

32. 全局作用域中,用 const 和 let 聲明的變量不在 window 上,那到底在哪里?如何去獲取?

在全局作用域中,用 constlet 聲明的變量不會成為 window 對象的屬性。它們處于全局作用域中,但不屬于 window 對象,可以直接通過變量名訪問。

let a = 10;
const b = 20;
console.log(a); // 輸出 10
console.log(b); // 輸出 20

33. 介紹下 Set、Map、WeakSet 和 WeakMap 的區別

  • Set:存儲唯一值的集合,支持值的快速增刪查操作。
  • Map:鍵值對集合,鍵可以是任意類型,保持鍵值對插入順序。
  • WeakSet:只存儲對象的集合,弱引用,不能遍歷,沒有 clear 方法。
  • WeakMap:鍵值對集合,鍵必須是對象,弱引用,不能遍歷,沒有 clear 方法。
const set = new Set([1, 2, 3]);
const map = new Map([['key1', 'value1'], ['key2', 'value2']]);
const weakSet = new WeakSet();
const weakMap = new WeakMap();

34. Promise.all() 和 Promise.allSettled() 的比較

  • Promise.all():接受一個 Promise 對象的數組,返回一個新的 Promise。當所有 Promise 都 fulfilled 時,返回一個包含所有結果的數組;如果有一個 Promise 被 rejected,則返回第一個被拒絕的理由。
  • Promise.allSettled():接受一個 Promise 對象的數組,返回一個新的 Promise。當所有 Promise 都 settle(完成或拒絕)時,返回一個包含每個 Promise 結果對象的數組,每個結果對象包含 statusvaluereason
Promise.all([promise1, promise2]).then(results => console.log(results)).catch(error => console.error(error));Promise.allSettled([promise1, promise2]).then(results => results.forEach(result => console.log(result)));

通過對 Promise 和 ECMAScript6 的深入理解,可以更好地應對現代 JavaScript 開發中的復雜異步操作和新特性,提升代碼質量和開發效率。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/19095.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/19095.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/19095.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

代碼隨想錄算法訓練營Day22|235.二叉搜索樹的最近公共祖先、701.二叉搜索樹中的插入操作、450.刪除二叉搜索樹中的節點

二叉搜索樹的最近公共祖先 不考慮二叉搜索樹這一條件的話,普通的二叉搜索樹搜索最近的公共祖先就是昨日的做法,這種做法也能解決二叉搜索樹的最近公共祖先。 class Solution { public:TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, Tr…

貪心算法02(leetcode122/55/4)

參考資料: https://programmercarl.com/0122.%E4%B9%B0%E5%8D%96%E8%82%A1%E7%A5%A8%E7%9A%84%E6%9C%80%E4%BD%B3%E6%97%B6%E6%9C%BAII.html 122. 買賣股票的最佳時機 II 題目描述: 給你一個整數數組 prices ,其中 prices[i] 表示某支股票第…

STM32讀寫內部FLASH讀取芯片id

文章目錄 讀寫內部Flash接線程序編寫測試效果補充 讀取芯片id代碼編寫 讀寫內部Flash 接線 程序編寫 首先使用ThisFlash.c來寫入flash的基本操作,寫入、讀取、擦除,然后使用Store.c配合數組來進行主存與flash的交互 ThisFlash.c #include "stm32…

為什么工控現場會用到Profinet轉Modbus網關設備

一、背景: 工控現場之所以需要使用Profinet轉Modbus網關,是因為工控系統中常常存在不同廠家設備之間通訊協議不一致的問題。而Modbus和Profinet分別代表著兩種不同的通信協議,Profinet通常用于較新的設備,而Modbus則是比較老的通…

思科防火墻ASA Version 9.1(1) 怎么配置靜態NAT,把內網ip192.168.1.10 端口1000映射到公網端口1000上?

環境: 思科防火墻5520 ASA Version 9.1(1) 問題描述: 思科防火墻ASA Version 9.1(1) 怎么配置靜態NAT,把內網ip192.168.1.10 端口1000映射到公網端口1000上? 解決方案: 舊版本8.0 1.做之前要先查一下有沒有端口被占用,要和業務確認2.sh Xlate | in 10011 端口 這條…

ch2應用層--計算機網絡期末復習

2.1應用層協議原理 網絡應用程序位于應用層 開發網絡應用程序: 寫出能夠在不同的端系統上通過網絡彼此通信的程序 2.1.1網絡應用程序體系結構分類: 客戶機/服務器結構 服務器: 總是打開(always-on)具有固定的、眾所周知的IP地址 主機群集常被用于創建強大的虛擬服務器 客…

MongoDB CRUD操作:快照查詢

MongoDB CRUD操作:快照查詢 文章目錄 MongoDB CRUD操作:快照查詢對比本地和快照的讀關注舉例從相同的時間點運行查詢從過去某個時刻讀取數據的一致狀態 配置快照保留時間磁盤空間和歷史記錄 使用快照查詢可以讀取最近某個時間點的數據,而且從…

基于51單片機的溫控風扇的設計–仿真設計

可實現通過DS18B20測量當前環境溫度 可實現通過溫度自動控制風扇轉速 可實現通過按鍵設置不同風速對應的溫度 可實現通過按鍵切換自動、手動模式 可實現在手動模式下通過按鍵調整風扇轉速 可實現通過LCD1602顯示溫度、風扇轉速擋位、自動/手動模式

【C++】模擬實現string類

🦄個人主頁:修修修也 🎏所屬專欄:C ??操作環境:Visual Studio 2022 目錄 一.了解項目功能 二.逐步實現項目功能模塊及其邏輯詳解 🎏構建成員變量 🎏實現string類默認成員函數 📌構造函數 📌析構函數…

k8s 全面掌控日志系統

概述 為了提高系統運維和故障排查的效率, 日志系統采用 ELK(Elasticsearch、Logstash、Kibana)技術棧,通過 FileBeats 作為日志收集器,將來自不同節點的日志數據匯總并存儲在 Elasticsearch 中,最終通過 K…

創建一個新的Spring Security應用程序,并使用JDBC連接數據庫

創建一個新的Spring Security應用程序,并使用JDBC連接數據庫 在這個教程中,我們將學習如何創建一個新的Spring Security應用程序,使用JDBC連接數據庫以獲取用戶信息并進行認證。我們還將學習如何配置Spring Security以從數據庫中獲取用戶和權…

Vue3使用Composition API實現響應式

title: Vue3使用Composition API實現響應式 date: 2024/5/29 下午8:10:24 updated: 2024/5/29 下午8:10:24 categories: 前端開發 tags: Vue3CompositionRefsReactiveWatchLifecycleDebugging 1. 介紹 Composition API是Vue.js 3中新增的一組API,用于在組件中組…

SQL 語言:嵌入式 SQL 和動態 SQL

文章目錄 基本概述嵌入式 SQL動態 SQL總結 基本概述 嵌入式SQL和動態SQL是兩種在應用程序中嵌入和使用SQL語句的方法。它們都允許開發人員在編程語言中編寫SQL語句,以便在應用程序中執行數據庫操作。然而,這兩種方法在實現方式、性能和靈活性方面存在一…

Java數據結構與算法(紅黑樹)

前言 紅黑樹是一種自平衡二叉搜索樹,確保在插入和刪除操作后,樹的高度保持平衡,從而保證基本操作(插入、刪除、查找)的時間復雜度為O(log n)。 實現原理 紅黑樹具有以下性質: 每個節點要么是紅色&#…

go語言學習之旅之Go結構體

在Go語言中,結構體(struct)是一種用戶定義的數據類型,用于組合不同類型的數據項。結構體可以包含其他結構體或基本數據類型的字段。以下是關于Go語言結構體的基本知識: 定義結構體: package mainimport &…

Python 之微信指數小程序數據抓取

Fiddler安裝和設置 安裝 Fiddler 安裝包可以從這里獲取,如果失效了可以自己網上找一個安裝。 鏈接:https://pan.baidu.com/s/1N30BoDWm2_dBL8i8GRzK5g?pwd1znv 提取碼:1znv 然后就是點擊安裝就好了,沒什么好多說的。 啟用…

刷代碼隨想錄有感(83):貪心算法——最大子數組和

題干&#xff1a; 代碼&#xff1a; class Solution { public:int maxSubArray(vector<int>& nums) {int res INT_MIN;int count 0;for(int i 0; i < nums.size(); i){count nums[i];if(count > res) res count;if(count < 0)count 0;}return res;} …

【創作活動】探索 GPT-4o:下一代語言模型的技術革命

&#x1f604; 19年之后由于某些原因斷更了三年&#xff0c;23年重新揚帆起航&#xff0c;推出更多優質博文&#xff0c;希望大家多多支持&#xff5e; &#x1f337; 古之立大事者&#xff0c;不惟有超世之才&#xff0c;亦必有堅忍不拔之志 &#x1f390; 個人CSND主頁——Mi…

HTTP報文

HTTP報文 報文流 HTTP報文是在HTTP引用程序之間發送的數據塊&#xff0c;這些數據塊以一種文本形式的元信息開頭&#xff0c;這些信息描述了報文的內容和含義&#xff0c;后面跟著可選的數據部分&#xff0c;這些報文在客戶端&#xff0c;服務器和代理之間流動。 報文流入源…

git更改本地項目關聯到新倉庫

刪除現在遠程關聯的倉庫 git remote rm origin鏈接新倉庫 git remote add origin url(需要關聯的新倉庫地址)代碼提交到遠程倉庫master分支 git push --set-upstream origin master本地分支更新同步至遠程倉庫 比如本地有dev分支 git push origin dev:dev