網(wǎng)站改版如何做301免費發(fā)布信息平臺有哪些
23. 說說你對 Promise 的理解
Promise 是 ECMAScript6 引入的一種異步編程解決方案,用于處理異步操作。它表示一個尚未完成但最終會結(jié)束的操作,具有三種狀態(tài):pending(進行中)、fulfilled(已完成)和 rejected(已拒絕)。Promise 使得異步代碼更具可讀性和可維護性,避免了傳統(tǒng)回調(diào)函數(shù)嵌套帶來的“回調(diào)地獄”問題。通過鏈?zhǔn)秸{(diào)用 then()
和 catch()
方法,可以更加優(yōu)雅地處理異步操作的結(jié)果和錯誤。
24. Promise 的構(gòu)造函數(shù)
Promise 的構(gòu)造函數(shù)接受一個執(zhí)行函數(shù)(executor),該函數(shù)包含兩個參數(shù):resolve
和 reject
。resolve
用于將 Promise 狀態(tài)從 pending 變?yōu)?fulfilled,并傳遞結(jié)果;reject
用于將 Promise 狀態(tài)從 pending 變?yōu)?rejected,并傳遞錯誤信息。示例如下:
const promise = new Promise((resolve, reject) => {// 異步操作if (/* 操作成功 */) {resolve(value);} else {reject(error);}
});
25. 談一談你了解 ECMAScript6 的新特性?
ECMAScript6(ES6)引入了許多新特性,包括但不限于:
- 塊級作用域聲明:
let
和const
- 箭頭函數(shù):
=>
,簡化函數(shù)定義并自動綁定this
- 模板字符串:使用反引號(``)和內(nèi)嵌表達式
${}
- 解構(gòu)賦值:從數(shù)組和對象中提取值并賦給變量
- 類:
class
,面向?qū)ο缶幊痰男抡Z法 - 模塊:
import
和export
,實現(xiàn)模塊化 - 默認(rèn)參數(shù):為函數(shù)參數(shù)設(shè)置默認(rèn)值
- Promise:用于處理異步操作
- Symbol:一種新的原始數(shù)據(jù)類型,表示獨一無二的值
26. Object.is() 與原來的比較操作符 =、 的區(qū)別?
Object.is()
用于判斷兩個值是否嚴(yán)格相等,與 ===
類似,但在以下兩種情況下有區(qū)別:
Object.is(NaN, NaN)
返回true
,而NaN === NaN
返回false
Object.is(+0, -0)
返回false
,而+0 === -0
返回true
==
是寬松相等比較,會進行類型轉(zhuǎn)換,而 ===
是嚴(yán)格相等比較,不會進行類型轉(zhuǎn)換。
27. 什么是 Babel
Babel 是一個 JavaScript 編譯器,用于將現(xiàn)代的 ES6/ES2015+ 代碼轉(zhuǎn)換為向后兼容的 ES5 代碼,以便在不支持最新標(biāo)準(zhǔn)的環(huán)境中運行。Babel 允許開發(fā)者使用最新的 JavaScript 特性,而不必?fù)?dān)心瀏覽器兼容性問題。它支持插件和預(yù)設(shè),能夠擴展和定制編譯過程。
28. Symbol 有什么用處
Symbol 是 ES6 引入的一種新的原始數(shù)據(jù)類型,表示獨一無二的值。主要用途包括:
- 作為對象屬性的鍵,避免屬性名沖突
- 創(chuàng)建不可枚舉的屬性,隱藏內(nèi)部實現(xiàn)細節(jié)
- 實現(xiàn)迭代器(iterator)接口
每個 Symbol 都是唯一的,即使使用相同的描述符創(chuàng)建,也不會相等。
29. 模塊化
模塊化是將代碼分割成獨立且可重用的模塊的編程技術(shù)。ES6 提供了原生模塊系統(tǒng),通過 import
和 export
關(guān)鍵字實現(xiàn)模塊的引入和導(dǎo)出。模塊化有助于提高代碼的可維護性和可讀性,支持按需加載,減少命名沖突。
// 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. 箭頭函數(shù)的特點
箭頭函數(shù)是 ES6 引入的簡潔函數(shù)定義方式,具有以下特點:
- 使用
=>
語法 - 沒有自己的
this
,它會捕獲上下文的this
值 - 沒有
arguments
對象,可以使用 rest 參數(shù)...
替代 - 無法通過
new
關(guān)鍵字調(diào)用,沒有prototype
屬性
const add = (a, b) => a + b;
31. ES5 / ES6 的繼承除了寫法以外還有什么區(qū)別
除了寫法上的差異,ES6 繼承相較于 ES5 繼承具有以下優(yōu)勢:
- 更加直觀和簡潔:使用
class
和extends
關(guān)鍵字,使得繼承關(guān)系更加清晰 super
關(guān)鍵字:調(diào)用父類構(gòu)造函數(shù)和方法,簡化了繼承邏輯- 內(nèi)建的類語法:避免了 ES5 中通過原型鏈實現(xiàn)繼承的復(fù)雜性
32. 全局作用域中,用 const 和 let 聲明的變量不在 window 上,那到底在哪里?如何去獲取?
在全局作用域中,用 const
和 let
聲明的變量不會成為 window
對象的屬性。它們處于全局作用域中,但不屬于 window
對象,可以直接通過變量名訪問。
let a = 10;
const b = 20;
console.log(a); // 輸出 10
console.log(b); // 輸出 20
33. 介紹下 Set、Map、WeakSet 和 WeakMap 的區(qū)別
- 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 對象的數(shù)組,返回一個新的 Promise。當(dāng)所有 Promise 都 fulfilled 時,返回一個包含所有結(jié)果的數(shù)組;如果有一個 Promise 被 rejected,則返回第一個被拒絕的理由。
- Promise.allSettled():接受一個 Promise 對象的數(shù)組,返回一個新的 Promise。當(dāng)所有 Promise 都 settle(完成或拒絕)時,返回一個包含每個 Promise 結(jié)果對象的數(shù)組,每個結(jié)果對象包含
status
和value
或reason
。
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 的深入理解,可以更好地應(yīng)對現(xiàn)代 JavaScript 開發(fā)中的復(fù)雜異步操作和新特性,提升代碼質(zhì)量和開發(fā)效率。