英文| https://medium.com/javascript-in-plain-english/10-javascript-interview-questions-for-2020-697b40de9480的JavaScript正在成為世界上最受歡迎的程式語言。隨著對JS開發人員的需求增長,你必須為此做好準備。以下是你夢寐以求的十大JavaScript的基礎面試題。
1,var和let有什麼區別?儘管這似乎很容易,但您不會相信我因為沒有回答這個問題而不得不拒絕多少候選人。區別在於範圍等級。var是功能範圍的,但let(和const)是塊範圍的。要了解差異,請查看以下示例:
function doStuff() { let a = 5; var b = 5; console.log(a + b); }
doStuff(); console.log(a); console.log(b);
function doMoreStuff() { if (2 + 2 === 4) { var a = 5; let b = 5; } console.log(a); console.log(b); }
doMoreStuff();
for (let i = 0; i < 5; i++) { setTimeout(() => console.log(i), 100);}
for (var j = 0; j < 5; j++) { setTimeout(() => console.log(j), 100);}2,==和===有什麼區別?如果您的答案是「 ==按值比較,===也按類型比較」,那是不正確的。JS引擎的理解方式,==允許強制類型和===允許。類型強制是解釋器的自動類型轉換。這是JS中最令人驚奇的原因([] ==![]確實如此)。您可以在以下代碼段中觀察到差異:5 == '5'; 5 === '5';
1 == true; 1 > false; 0 === false;
'true' == true; 'true' === true; 3,「 this」關鍵字是什麼意思?您可能很想回答這個問題,它指向類體內的類實例,而不是對。首先,JS中的類是語法糖,不會釋放任何新功能。此關鍵字在任何函數中均可用,並指向包含此函數的對象。通過一個示例可能更容易理解:const myObject = { a: 'b', b: 'c', doStuff: function() { // Here, this refers to myObject console.log(this.a + this.b); }}
myObject.doStuff(); // bc
// BUT:const anotherObject = { a: 'abacaba', b: '!'};anotherObject.doStuff = myObject.doStuff;anotherObject.doStuff(); // abacaba!
// Arrow functions do not have their own this and refer to the outer one:const arrowObject = { a: 'b', // here, this refers to the root function (file itself), which has no idea about a doMoreStuff: () => console.log(this.a)};
arrowObject.doMoreStuff(); // undefined4,什麼是構造函數?JS中的構造函數也不是與類相關的函數,並且與此關鍵字緊密相關。使用新關鍵字調用構造函數,並返回任何此值。請注意,在構造函數this中,函數並不指向外部對象,,甚至使用佔位符對象:function Car(name, make) { this.name = name; this.make = make; }
const myCar = new Car('Outback', 'Subaru');console.log(myCar.name); 5,如何將基於某些的函數轉換為基於Promise的函數?解決問題更多的是練習,但至少是你必須知道。某些函數只是你打算在以後調用的簡單函數。當你必須等待某些事情(例如來自API的響應)時,通常會使用它們。但是,基於根本函數的代碼太複雜了,這就是為什麼約會Promises函數的原因。我不在這裡討論,但是如果你現在知道承諾是什麼,請查看本文(地址https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise)。在下一個示例中,要求你將getData數據函數轉換為諾言:function getData(callback, errorCallback) { try { callback(result) } catch (e) { errorCallback(e); }}
getData(result => console.log(result), error => console.error(error));
function getDataAsync() { return new Promise((resolve, reject) => { getData(resolve, reject); });}
getDataAsync() .then(result => console.log(result)) .catch(error => console.error(error));
async functoin main() { const result = await getDataAsync(); console.log(result);}無極構造函數接受一個回調,該回調接收兩個函數:決心和拒絕在回調內部,你可以執行耗時的任務,並根據結果調用。`決心`或`reject`。6,NaN === NaN?簡而言之,NaN代表「不是數字」,僅因為一個值不是數字,而另一個值不是數字並不意味著這些變量。缺點是您無法真正檢查變量是否正在使用NaN使用myVariable === NaN。您可以使用該Number.isNaN功能或myVariable!== myVariable進行檢查。7、0.1 + 0.2 === 0.3?假。這個技巧完全適用於JS:在任何語言的浮點運算中都很常見。它與CPU處理浮點數的方式有關。實際值0.1 + 0.2到0.300000001並檢查是否,你將編寫Math.abs (0.3-(0.2 + 0.1))<= EPS,其中EPS是一個任意小的值(例如0.00001)。8,JS中的原始數據類型是什麼?JS中的原始數據類型是不是對象且沒有方法的數據。這是JS中的原始數據類型的列表:9,什麼是「嚴格」模式?在JS中,您可以通過「使用嚴格」;在文件的開頭放置嚴格的模式。嚴格模式可以在代碼中進行更嚴格的錯誤檢查,以便調試更加容易。例如,此代碼段可在常規JS中使用,但不嚴格:x = 'abacaba';
delete x;
function(x1, x1) {} 10,該代碼的輸出是什麼?function abacaba() { return { a: 'b' }}
console.log(abacaba());undefined。發生這種情況是因為JS將在第2行的「返回」之後插入分號,變為第3-5行認為作用域而不是對象定義。在此之後,感謝你的閱讀,也希望今天的文章對你有所幫助,祝你在面試中一切順利!