天天看點

面試官:你需要正确回答這些 JavaScript 問題才能獲得 offer

面試官:你需要正确回答這些 JavaScript 問題才能獲得 offer

作為開發人員找到我的第一份工作花了我幾個月的時間,經過數百封拒絕郵件,我終于得到了面試機會。我被問了很多問題來測試我的程式設計能力,其中一些是基礎的,但其中一些問題,在短暫的面試期間對我來說并不是那麼容易弄清楚。我在這裡,我分享一些我面試中遇到的問題,以便我們可以一起學習和成長。

如果你對我的回答有任何疑問,或者如果你有比我更好的解決方案,請在留言區告訴我。

01、console.log(1 < 2 < 3) 傳回什麼?

應該是從左到右求值,是以問題基本上相當于console.log(1 < 2)和console.log(2 < 3)。由于 console.log(1 < 2) 計算結果為 true 并且 JavaScript 嘗試轉換為相同的類型,是以 true 被轉換為 1。從這個意義上說,console.log(1 < 2 < 3) 意味着 console.log( true < 3 ),也就是console.log(1 < 3),是以最後的答案是true。

讓我們再想一想,console.log(3 > 2 > 1) 會傳回什麼?按照上面的邏輯,問題應該被解析成console.log(3 > 2)和console.log(2 > 1)兩部分。顯然 3 > 2 為true,是以我們将其轉換為 1。

下一步是比較 console.log(true > 1) 是否等效于 console.log(1 > 1),是以它會傳回 false。

02、如何将兩個數組合并在一起?

array.concat()

此方法将兩個或多個數組合并在一起,它不會更改現有數組并傳回一個新數組。

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"]      

擴充運算符

擴充運算符由三個點 (...) 組成,它允許你連接配接數組或複制數組執行個體。

let array1 = [1,2];
let array2 = [3,4,5];
let mergedArray = [...array1, ...array2];
console.log(mergedArray) // [1,2,3,4,5];      

03、array.map和array.forEach有什麼差別?

這兩種方法都周遊數組中的元素。但是,array.forEach() 不傳回值,它會在 array.map() 建立一個新數組時對數組進行原地變異。是以,如果你隻是需要周遊一個數組,forEach 是一個不錯的選擇,如果你不想改變原始數組,那麼 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]      

04、控制台的列印結果是什麼?

面試官:你需要正确回答這些 JavaScript 問題才能獲得 offer

正确答案應該是 ACB。這是因為代碼從頂部開始,是以console.log(‘A’)會先被執行。然後,調用 setTimeout 但僅在 1 秒後執行,是以下一步将是 console.log('C')。B 将是控制台上顯示的最後一個字元。

05、var、let 和 const 有什麼差別?

這個問題測試你對一些重要的 JavaScript 概念的了解。var 和 let 之間有幾個差別。當你在函數外部定義 var 變量時,它們屬于全局範圍。全局變量意味着該變量可以被任何函數通路。

另一方面,使用 let 關鍵字的變量是塊作用域的。這意味着該變量隻存在并且可以在相應的範圍内通路。在 JavaScript 中,塊由一對花括号 {} 分隔,就像在 for 語句中一樣。

const 是用于聲明常量的關鍵字,它基本上與 let 關鍵字非常相似,不同之處在于,它建立對值的隻讀引用并且不能重新配置設定值。例如:

const a = 10; 
a = 20;  // Type error as value cannot be reassigned      

寫在最後

以上就是我在面試中經常被問到的幾個面試題,我在這裡總結了一下,同時,也想跟大家說一句,基礎知識真的很重要。

準備開發面試很困難,需要付出很多努力,幸運的是你可以通過更多的學習和練習變得更好。 我希望你在面試中表現出色,并祝你好運!

最後,感謝你的閱讀,如果你覺得有用的話,請記得點贊我,關注我,并将他分享給你身邊的朋友,也許能夠幫助到他。

面試官:你需要正确回答這些 JavaScript 問題才能獲得 offer

繼續閱讀