面試官:你需要正確回答這些 JavaScript 問題才能獲得 offer
作為開發(fā)人員找到我的第一份工作花了我?guī)讉€(gè)月的時(shí)間,經(jīng)過數(shù)百封拒絕郵件,我終于得到了面試機(jī)會(huì)。我被問了很多問題來測(cè)試我的編程能力,其中一些是基礎(chǔ)的,但其中一些問題,在短暫的面試期間對(duì)我來說并不是那么容易弄清楚。我在這里,我分享一些我面試中遇到的問題,以便我們可以一起學(xué)習(xí)和成長(zhǎng)。
如果你對(duì)我的回答有任何疑問,或者如果你有比我更好的解決方案,請(qǐng)?jiān)诹粞詤^(qū)告訴我。
1、console.log(1 < 2 < 3) 返回什么?
應(yīng)該是從左到右求值,所以問題基本上相當(dāng)于console.log(1 < 2)和console.log(2 < 3)。由于 console.log(1 < 2) 計(jì)算結(jié)果為 true 并且 JavaScript 嘗試轉(zhuǎn)換為相同的類型,所以 true 被轉(zhuǎn)換為 1。從這個(gè)意義上說,console.log(1 < 2 < 3) 意味著 console.log( true < 3 ),也就是console.log(1 < 3),所以最后的答案是true。
讓我們?cè)傧胍幌?,console.log(3 > 2 > 1) 會(huì)返回什么?按照上面的邏輯,問題應(yīng)該被解析成console.log(3 > 2)和console.log(2 > 1)兩部分。顯然 3 > 2 為true,所以我們將其轉(zhuǎn)換為 1。
下一步是比較 console.log(true > 1) 是否等效于 console.log(1 > 1),所以它會(huì)返回 false。
2、如何將兩個(gè)數(shù)組合并在一起?
array.concat()
此方法將兩個(gè)或多個(gè)數(shù)組合并在一起,它不會(huì)更改現(xiàn)有數(shù)組并返回一個(gè)新數(shù)組。
const array1 = ['a', 'b', 'c'];
const array2 = ['d', 'e', 'f'];
const array3 = array1.concat(array2);
console.log(array3); // expected output: Array ["a", "b", "c", "d", "e", "f"]
擴(kuò)展運(yùn)算符
擴(kuò)展運(yùn)算符由三個(gè)點(diǎn) (...) 組成,它允許你連接數(shù)組或復(fù)制數(shù)組實(shí)例。
let array1 = [1,2];
let array2 = [3,4,5];
let mergedArray = [array1, array2];
console.log(mergedArray) // [1,2,3,4,5];
3、array.map和array.forEach有什么區(qū)別?
這兩種方法都遍歷數(shù)組中的元素。但是,array.forEach() 不返回值,它會(huì)在 array.map() 創(chuàng)建一個(gè)新數(shù)組時(shí)對(duì)數(shù)組進(jìn)行原地變異。因此,如果你只是需要遍歷一個(gè)數(shù)組,forEach 是一個(gè)不錯(cuò)的選擇,如果你不想改變?cè)紨?shù)組,那么 map 更好。
const a = [1, 2, 3];
const doubled = a.forEach((num, index) => {
// Do something with num and/or index.
});
console.log(doubled) // undefined
const a = [1, 2, 3];
const doubled = a.map((num) => {
return num * 2;
});
// doubled = [2, 4, 6]
4、控制臺(tái)的打印結(jié)果是什么?
正確答案應(yīng)該是 ACB。這是因?yàn)榇a從頂部開始,所以console.log(‘A’)會(huì)先被執(zhí)行。然后,調(diào)用 setTimeout 但僅在 1 秒后執(zhí)行,因此下一步將是 console.log('C')。B 將是控制臺(tái)上顯示的最后一個(gè)字符。
5、var、let 和 const 有什么區(qū)別?
這個(gè)問題測(cè)試你對(duì)一些重要的 JavaScript 概念的了解。var 和 let 之間有幾個(gè)區(qū)別。當(dāng)你在函數(shù)外部定義 var 變量時(shí),它們屬于全局范圍。全局變量意味著該變量可以被任何函數(shù)訪問。
另一方面,使用 let 關(guān)鍵字的變量是塊作用域的。這意味著該變量只存在并且可以在相應(yīng)的范圍內(nèi)訪問。在 JavaScript 中,塊由一對(duì)花括號(hào) {} 分隔,就像在 for 語句中一樣。
const 是用于聲明常量的關(guān)鍵字,它基本上與 let 關(guān)鍵字非常相似,不同之處在于,它創(chuàng)建對(duì)值的只讀引用并且不能重新分配值。例如:
const a = 10;
a = 20; // Type error as value cannot be reassigned
寫在最后
以上就是我在面試中經(jīng)常被問到的幾個(gè)面試題,我在這里總結(jié)了一下,同時(shí),也想跟大家說一句,基礎(chǔ)知識(shí)真的很重要。
準(zhǔn)備開發(fā)面試很困難,需要付出很多努力,幸運(yùn)的是你可以通過更多的學(xué)習(xí)和練習(xí)變得更好。 我希望你在面試中表現(xiàn)出色,并祝你好運(yùn)!
最后,感謝你的閱讀,如果你覺得有用的話,請(qǐng)記得點(diǎn)贊我,關(guān)注我,并將他分享給你身邊的朋友,也許能夠幫助到他。