
英文 | https://javascript.plainenglish.io/50-questions-to-master-the-javascript-coding-interview-639d2ac12630
翻譯 | web前端開發(fā)公眾號(hào)
1、以下哪個(gè)先打印?

答案是第二種情況(打印出queueMicroTask更好),因?yàn)閬碜詑ueueMicroTask的任務(wù)在調(diào)用棧為空之后且在調(diào)用事件循環(huán)之前被調(diào)用,對(duì)于setTimeout而言,任務(wù)是eventQeue的一部分。2、控制臺(tái)輸出是什么?

答案是輸出為10,因?yàn)閷?duì)象傳遞給函數(shù)時(shí)的對(duì)象相似,僅傳遞其值,而不傳遞對(duì)內(nèi)存位置的實(shí)際引用。這就是為什么更改僅影響函數(shù)范圍內(nèi)的參數(shù)的原因。3、控制臺(tái)輸出是什么?

在這種情況下,由于我們兩次定義了相同的變量,因此,會(huì)在控制臺(tái)上引發(fā)錯(cuò)誤。但是,如果我們使用var定義相同的變量,則控制臺(tái)將返回50 。同樣,在使用const定義變量時(shí),我們將得到相同的錯(cuò)誤。4、Line1和Line2的控制臺(tái)輸出是什么?

在Line1中,我們有兩個(gè)相互比較的對(duì)象,并且它們都是唯一的,因此它將在控制臺(tái)上記錄為False。在Line2中,我們使用===運(yùn)算符來檢查兩個(gè)字符串基元而不是字符串對(duì)象,因此我們得到True。5、控制臺(tái)輸出是什么,為什么?

與之前的問題類似,我們比較了兩個(gè)唯一的對(duì)象。在這種情況下,只有一個(gè)唯一的對(duì)象,它具有兩個(gè)常量x和y,它們指向內(nèi)存中的唯一對(duì)象,并在控制臺(tái)上返回True。6、數(shù)組對(duì)象是JavaScript中的原始對(duì)象嗎?
在JavaScript中,我們處理的大多數(shù)事物都是對(duì)象,類似地,數(shù)組只是JavaScript中的特殊對(duì)象,它們具有其他對(duì)象所沒有的屬性。7、以下函數(shù)的返回類型是什么?

答案,是B,因?yàn)楫惒胶瘮?shù)在JavaScript中返回Promises 。8、等待關(guān)鍵字會(huì)阻止應(yīng)用程序中的所有JavaScript代碼執(zhí)行,直到返回等待的Promises?
答案是False,await關(guān)鍵字僅阻止執(zhí)行包含await關(guān)鍵字的特定函數(shù)內(nèi)的代碼。9、以下打印什么?

JavaScript中的函數(shù)是對(duì)象,typeof name將輸出function。10、以下是用于打印“用戶名”的有效語法?

以下語法是有效的,因?yàn)槲覀冋趯惒胶瘮?shù)的返回值傳遞給callback。
11、typeof和instanceof之間沒有什么區(qū)別?
typeof返回類型, instanceof返回布爾值。instanceof需要TypeScript,而typeof則不需要。typeof在右側(cè)使用變量名稱, instanceof在左側(cè)和右側(cè)使用值,而不是。答案是B,因?yàn)樗鼈兌疾灰骉ypeScript,并且兩者都不是JavaScript固有的。12、滿足所有承諾后,以下哪個(gè)解決方案可以解決?

答案是C,當(dāng)我們需要等待執(zhí)行直到所有的都被解決時(shí),Promise.all()會(huì)非常有用。
在這種情況下,我們有&運(yùn)算符,它與&&運(yùn)算符完全不同。&是按位運(yùn)算符,當(dāng)我們比較11和3時(shí),它將與1011和0011的二進(jìn)制相同。結(jié)果,只有都為1的位保持為1,返回的輸出為0011,它是3的二進(jìn)制表示形式, 因此3記錄在控制臺(tái)上。14、Object。[[Prototype]]的值是什么?
答案是null,因?yàn)槟J(rèn)值的對(duì)象。[[原型]為空,它會(huì)返回undefined在控制臺(tái)上。該對(duì)象位于原型鏈的頂部,當(dāng)瀏覽器查找訪問屬性的值時(shí),它將遍歷原型鏈,直到找到該值或直到不再遍歷所有原型為止。15、空值合并運(yùn)算符做什么?
當(dāng)左側(cè)操作數(shù)為null或未定義時(shí),它將返回右側(cè)操作數(shù)。16、getElementsByTagName是JavaScript函數(shù)嗎?
不,getElementsByTagName是一個(gè)Web API函數(shù),就像普通的JS函數(shù)一樣可用。17、在JavaScript中使用事件委托時(shí)
例如,當(dāng)我們必須偵聽頁面加載期間可能不存在的事件時(shí),可以使用事件委托,并在父元素上提供事件處理程序并查看event.target。但是,如今,現(xiàn)代的前端框架和庫使此操作變得不必要了。18、以下哪一項(xiàng)不是內(nèi)置的JS錯(cuò)誤類型?

19、以下哪一項(xiàng)不是有效的Promise方法?

20、創(chuàng)建字符串后,我們可以修改它嗎?
不可以,因?yàn)樽址贘avaScript中是不可變的,指向字符串的變量可以分配給另一個(gè)字符串。21、承諾鏈中的嵌套捕獲可以捕獲在承諾鏈中向上拋出的錯(cuò)誤嗎?
不可以,嵌套是一種用于限制catch語句范圍的控制結(jié)構(gòu)。用簡(jiǎn)單的話來說,嵌套的catch僅捕獲其作用域及其以下范圍內(nèi)的故障,而不捕獲嵌套范圍之外的鏈中較高的錯(cuò)誤。22、控制臺(tái)輸出是什么,為什么?

即使mymap.get({})是有效的語法,它也會(huì)在控制臺(tái)上返回undefined。因?yàn)閟et和get中的Object是內(nèi)存中兩個(gè)不同的空對(duì)象,因此getter不會(huì)返回值。23、控制臺(tái)輸出是什么,為什么?

控制臺(tái)輸出將為Map {'a'=> 2,'b'=> 2,'c'=> 1},這意味著第二個(gè)映射中的所有相同鍵將覆蓋第一個(gè)映射中的鍵。24、括號(hào)符號(hào)可以像點(diǎn)符號(hào)一樣鏈接嗎?
是的,可以,obj.prop1.prop2和obj ['prop1'] ['prop2']是等效的。25、for…in循環(huán)中會(huì)顯示什么類型的屬性?

26、以下內(nèi)容是什么?

控制臺(tái)輸出將為'Mohit',因?yàn)閮?nèi)部函數(shù)有權(quán)訪問在外部作用域中聲明的變量。27、函數(shù)引用自身進(jìn)行遞歸的三種方式是什么?
該函數(shù)的名稱,一個(gè)指向該函數(shù)的范圍內(nèi)變量,并使用arguments.callee。28、JavaScript是否支持重載?
不,JavaScript本身不支持重載,但TypeScript可以。但是,可以在JavaScript中通過在未將所有可能的參數(shù)都傳遞給函數(shù)時(shí)返回不同的輸出來執(zhí)行重載。29、return語句在數(shù)組的forEach循環(huán)中做什么?
它不會(huì)返回任何內(nèi)容,并且如果你需要從循環(huán)中返回值,則永遠(yuǎn)不要使用forEach循環(huán)。30、RegExp沒有任何屬性。那是對(duì)的嗎?
不,RegExp具有許多屬性,例如.flags和.global。31、控制臺(tái)輸出是什么?

控制臺(tái)輸出將為10和5,因?yàn)樵摵瘮?shù)在Promise中沒有異步的內(nèi)容,并且Promise同步解析。32、在瀏覽器下一次重畫顯示內(nèi)容之前,哪個(gè)函數(shù)會(huì)執(zhí)行指定的代碼塊?

33、為什么在導(dǎo)入模塊時(shí)使用別名?
大多數(shù)時(shí)候,我們處理具有默認(rèn)命名約定的簡(jiǎn)單導(dǎo)入,除此之外,有時(shí)我們不得不處理名稱,因?yàn)橛械拿Q較長(zhǎng)。在這種情況下,使用別名是有幫助的。34、使用縮減函數(shù)從數(shù)字?jǐn)?shù)組中找到最小值。

35、JavaScript中的子程序是什么?
子例程是主例程中遇到的函數(shù),然后將其保存到對(duì)象并存儲(chǔ)以供以后使用。例如,執(zhí)行范圍(變量,參數(shù)等)與子例程一起存儲(chǔ)。36、我們可以使用eventHandlers剪切和復(fù)制來防止用戶將內(nèi)容從瀏覽器復(fù)制到剪貼板嗎?
37、創(chuàng)建新對(duì)象的三種可能方法是什么?
new Object()&Object.create()和文字符號(hào),其中我們定義了像this-(const obj = {a:2})這樣的對(duì)象。38、控制臺(tái)輸出是什么,為什么?

一個(gè)被分配到一個(gè)對(duì)象,b被分配給一個(gè)使用該擴(kuò)展運(yùn)算符,它意味著一個(gè)和b在技術(shù)上是相同的。使用Object.assign()中,c現(xiàn)在被指定到一個(gè),并且后來在這之后,我們改變的值X在一個(gè)作為2。39、Object.freeze()的作用是什么?
40、event.target與event.currentTarget有何不同?
event.currentTarget隨著事件起泡而變化,event.target保持不變。41、Array sort()方法的默認(rèn)排序是什么?
42、什么是比賽條件?
當(dāng)兩個(gè)線程或異步進(jìn)程必須完成自身操作以更新某些共享狀態(tài)時(shí),否則將出現(xiàn)錯(cuò)誤或不良結(jié)果。43、class關(guān)鍵字在JavaScript中有什么作用?
使JavaScript更加面向?qū)ο笾皇钦Z法上,即使使用class關(guān)鍵字,JavaScript仍會(huì)使用原型繼承。44、 queueMicrotask隊(duì)列中的任務(wù)是在后進(jìn)先出的基礎(chǔ)上執(zhí)行的。真的嗎?
否,任務(wù)按照先進(jìn)先出的順序執(zhí)行。45、什么是Shadow DOM API?
陰影DOM API提供了一種隱藏的單獨(dú)的DOM,附加到不是通過正常的訪問元件JS DOM操作API。它提供Web組件的封裝。46、使用哪種方法將影子DOM樹附加到指定的元素,并返回對(duì)其ShadowRoot的引用?
47、控制臺(tái)輸出是什么,為什么?

它返回h,因?yàn)閿?shù)組在JavaScript中是從零開始的,因此arr [2] [1]將可以訪問外部數(shù)組的第3個(gè)元素和內(nèi)部數(shù)組的第2個(gè)元素,從而得出值“ h”。48、window.localStorage和window.sessionStorage有什么區(qū)別?
它們都將值對(duì)存儲(chǔ)在Web瀏覽器中,但是sessionStorage在瀏覽器關(guān)閉后會(huì)刪除存儲(chǔ)的值。49、!運(yùn)算符返回一個(gè)布爾值。真的嗎?
是的,例如,在if語句中,需要在評(píng)估中返回一個(gè)布爾值,例如if(a!== b)。50、JavaScript中的哪個(gè)ES6函數(shù)返回一個(gè)新數(shù)組?
學(xué)習(xí)更多技能
請(qǐng)點(diǎn)擊下方公眾號(hào)

