22道 JavaScript 面試常被問到的問題
如果你想從事開發(fā)工作,我們?cè)跍?zhǔn)備面試的時(shí)候,總會(huì)遇到很多面試題,這些面試題,都是企業(yè)作為篩選人員的一種方式,雖然,不一定能夠找到合適的員工,但是這樣的方式會(huì)提升他們的工作效率。
而作為應(yīng)聘者的我們,特別是作為一個(gè)行業(yè)新人,認(rèn)真準(zhǔn)備每一次面試真的非常重要,因?yàn)槲覀兤谕玫阶约盒膬x的工作機(jī)會(huì)。
其實(shí),很多時(shí)候,我們?cè)诿嬖嚨臅r(shí)候,企業(yè)也不會(huì)故意出難題為難大家,并且我發(fā)現(xiàn)一般的企業(yè),都不是要求大家掌握所有技能,當(dāng)然,這也不科學(xué),他們只希望前來面試的人對(duì) HTML、CSS 和最重要的 JavaScript 等基本 Web 技術(shù)有一些深入的了解,特別是JavaScript技術(shù),真的是可以出題的內(nèi)容太多了。
因此,今天,在這里,我們整理了一些面試中的高頻又基礎(chǔ)的JavaScript 面試題,希望對(duì)你有所幫助。
好了,我們現(xiàn)在開始今天的內(nèi)容。
1、ES6版本引入了哪些特性?
- let 和 const 關(guān)鍵字。
- 箭頭函數(shù)。
- 多行字符串。
- 解構(gòu)賦值。
- 增強(qiáng)的對(duì)象文字。
- Promises
2、var、const 和 let 的主要區(qū)別是什么?
- 用 let 和 const 聲明的變量是塊范圍的;用 var 聲明的變量是全局范圍的或函數(shù)范圍的。
- var 變量可以在其范圍內(nèi)更新和重新聲明;讓變量可以更新但不能重新聲明;const 變量既不能更新也不能重新聲明。
- var 可以提升到其作用域的頂部。其中 var 變量初始化為未定義,let 和 const 變量未初始化(臨時(shí)死區(qū),TDZ)。
- 雖然可以在不初始化的情況下聲明 var 和 let,但必須在聲明期間初始化 const。
3、什么是promise和async-await?
Promises 是一種在 JavaScript 中啟用異步編程的方法。一般來說,Promise 意味著程序調(diào)用函數(shù)時(shí)期它返回調(diào)用程序可以在進(jìn)一步計(jì)算中使用的結(jié)果。
Async-await 也有助于異步編程。它是 promise 的語法糖。Async-await 語法簡(jiǎn)單,很容易在單個(gè)函數(shù)中維護(hù)大量異步調(diào)用。此外, async-wait 可以防止回調(diào)地獄。
const myPromise = new Promise((resolve, reject) => {
// condition
});
4、什么是閉包?
在 JavaScript 函數(shù)中定義的函數(shù)稱為閉包。它可以訪問 3 種類型的范圍(內(nèi)部、外部和全局),在外部函數(shù)的情況下,除了訪問變量之外,它還可以查看參數(shù)。
5、如何用 JavaScript 編寫“Hello World”?
這可能是向所有新人提出的非常基本的 JavaScript 面試高頻問題。它可以使用以下語法編寫,可以放置在 HTML 文件的正文中。
document.write(“JavaScript Hello World!”);
6、如何使用外部 JS 文件?
可以通過使用以下語法從 HTML 文檔調(diào)用文件來完成,就像調(diào)用外部 CSS 文件一樣。
<script type="text/javascript" src="custom.js"></script>
7、JavaScript如何保持并發(fā)?
- 事件循環(huán)。
- 微和宏隊(duì)列。
- 回調(diào)。
- 線程池和集群(多線程)。
8、什么是回調(diào),并提供一個(gè)簡(jiǎn)單的例子
回調(diào)函數(shù)是作為參數(shù)傳遞給另一個(gè)函數(shù)并在某些操作完成后執(zhí)行的函數(shù)。下面是一個(gè)簡(jiǎn)單的回調(diào)函數(shù)示例,該函數(shù)在某些操作完成后記錄到控制臺(tái)。
function modifyArray(arr, callback) {
// do something to arr here
arr.push(100);
// then execute the callback function that was passed
callback();
}
var arr = [1, 2, 3, 4, 5];
modifyArray(arr, function() {
console.log("array has been modified", arr);
});
9、我們有多少種方式來聲明一個(gè)函數(shù),它們之間有什么不同?
函數(shù)聲明由 function 關(guān)鍵字組成,后跟一個(gè)強(qiáng)制性的函數(shù)名稱,一對(duì)括號(hào)中的參數(shù)列表。
可以在對(duì)象字面量和 ES2015 類的方法聲明中使用速記方法定義。
使用包含參數(shù)列表的一對(duì)括號(hào)定義箭頭函數(shù)。后面是一個(gè)粗箭頭 => 和一對(duì)分隔正文語句的花括號(hào)。
在函數(shù)表達(dá)式中,您將函數(shù)分配給變量。
可以使用 Function 構(gòu)造函數(shù)動(dòng)態(tài)創(chuàng)建函數(shù),但存在安全和性能問題,不建議使用。
10、什么是對(duì)象以及如何創(chuàng)建它?
一切都是對(duì)象,因?yàn)?JavaScript 是一種基于對(duì)象的語言。不過,我們可以將對(duì)象定義為具有自己的行為和狀態(tài)的實(shí)體。
創(chuàng)建對(duì)象的常用方法是使用“new”關(guān)鍵字創(chuàng)建實(shí)例。
Var object = new Object();
11、“this”是什么意思?
與其他面向?qū)ο蟮木幊陶Z言中“this”是由類實(shí)例化的對(duì)象不同,在 JavaScript 中,“this”是一個(gè)對(duì)象,它是方法的所有者。
12、什么是匿名函數(shù)?
顧名思義,它是一個(gè)沒有名字的函數(shù),它們是在運(yùn)行時(shí)使用函數(shù)運(yùn)算符動(dòng)態(tài)聲明的,因?yàn)樗峁┝吮嚷暶鞣蟮撵`活性。
var display=function()
{
alert("Anonymous Function is declared");
}
display();
13、您對(duì) BOM 了解多少?
BOM,也稱為瀏覽器對(duì)象模型,用作瀏覽器的交互介質(zhì)。默認(rèn)對(duì)象是窗口,所有函數(shù)都可以直接調(diào)用,也可以通過指定窗口來調(diào)用。History、Screen、location,是 Window 的不同屬性。
14、什么是 DOM 及其用法?
Document Object Model,俗稱DOM,代表HTML文檔,它用于更改 HTML 文檔的內(nèi)容。
15、如何從特定索引返回字符?
charAt() 方法可用于找出任何特定索引處的字符值,考慮到“n”是字符串的長度,索引可以從 0 開始,到“n-1”結(jié)束。然而,索引的值不能為負(fù)數(shù),不能等于或大于字符串的長度。
var str="LambdaTest";
document.writeln(str.charAt(4));
16、“==”和“===”的區(qū)別
這可能是被問得最多的 JavaScript 面試問題。
類型轉(zhuǎn)換相等 (==) 檢查 2 個(gè)變量是否相似,無論它們的數(shù)據(jù)類型如何。例如 (“3” ==3) 將返回 true。
嚴(yán)格相等 (===) 檢查 2 個(gè)變量是否具有相似的數(shù)據(jù)類型和值。例如 (“3” ===3) 將返回 false。
17、JS中有哪些不同的數(shù)據(jù)類型?
JavaScript 有以下數(shù)據(jù)類型:
18、什么是原型屬性?
原型屬性通常用于實(shí)現(xiàn)繼承。每個(gè)函數(shù)都有一個(gè),默認(rèn)值為空。方法和屬性被添加到原型中以使其可用于實(shí)例。你可以用一個(gè)計(jì)算矩形周長的例子來回答這個(gè) JavaScript 面試問題。
function Rectangle(x, y) {
this.x = x;
this.y = y;
}
Rectangle.prototype.perimeter = function() {
return 2 * (this.x + this.y);
}
var rectangle = new Rectangle(4, 3);
console.log(rectangle.perimeter()); // outputs '14'
19、異步編程及其重要性
在這里,JS 引擎在事件循環(huán)中運(yùn)行。當(dāng)遇到阻塞操作時(shí),會(huì)觸發(fā)請(qǐng)求并且代碼會(huì)不斷運(yùn)行。一旦響應(yīng)準(zhǔn)備好,就會(huì)觸發(fā)中斷。執(zhí)行事件處理程序,而控制流繼續(xù)。因此,通過異步編程,單個(gè)線程可以同時(shí)處理多個(gè)操作。
20、窗口對(duì)象的使用
這不是 JavaScript 對(duì)象,而是瀏覽器自動(dòng)創(chuàng)建的外部窗口。它用于顯示彈出對(duì)話框。例如
alert() - 顯示帶有自定義消息和“確定”按鈕的警報(bào)框。
注意:- 英特爾 XDK 測(cè)試 — 跨 3000 多種不同的桌面和移動(dòng)瀏覽器測(cè)試您基于英特爾 XDK CSS 框架的網(wǎng)站。
21、客戶端 JavaScript 與服務(wù)器端有何不同?
客戶端 JavaScript 通常由基本語言以及與在瀏覽器中運(yùn)行的腳本相關(guān)的某些預(yù)定義對(duì)象組成。由 HTML 直接嵌入,在運(yùn)行時(shí)由瀏覽器執(zhí)行。
服務(wù)器端 JS 幾乎類似于客戶端。但是,它是在服務(wù)器中執(zhí)行的,并且只有在代碼編譯完成后才能部署。
22、JavaScript 中變量的命名約定
在命名變量時(shí),我們必須遵循一定的規(guī)則:
- 不要使用 JavaScript 保留的關(guān)鍵字。例如——布爾值、中斷等。
- 不要以數(shù)字開頭的變量名。以“_”或字母開頭。例如,不要寫 123func,而是寫 func123 或 _123func。
- 變量區(qū)分大小寫?!瓼unc’ 和 ‘func’ 將被區(qū)別對(duì)待。
總結(jié)
以上就是在 JavaScript 面試中,被經(jīng)常問到的一些問題,當(dāng)然,這不是全部,我們?cè)诿嬖囍?,?jīng)常被問到一些關(guān)于JavaScript的問題,其實(shí),都是比較基礎(chǔ)的知識(shí)。
當(dāng)然,在實(shí)際面試中,具體面試官會(huì)問什么,誰也沒有辦法預(yù)料,但是,如果我們有備而來,就不至于太慌張,還有就是,面試時(shí)被問的技術(shù)問題,有時(shí)候,也取決于面試官的知識(shí)技能儲(chǔ)備以及工作中實(shí)際需要的知識(shí)。
總之,我們需要平時(shí)多加學(xué)習(xí),以備不時(shí)之需,技多不壓身。
最后,希望今天內(nèi)容對(duì)你有幫助,如果你覺得有用的話,請(qǐng)記得點(diǎn)贊我,關(guān)注我,并將它分享給你的朋友,也許能夠幫助到他。
感謝你的閱讀,祝編程愉快!