Heim >Web-Frontend >js-Tutorial >Die anspruchsvollsten und schwierigsten technischen Javascript-Interviewfragen mit Lösungen.
Hallo! Ich bin Vishal Tiwari und werde Ihnen einige herausfordernde Javascript-Interviewfragen stellen.
console.log(typeof null); // Output?
Ausgabe:Objekt
Erklärung: Dies ist eine bekannte Eigenart in JavaScript. Der Operator „typeof“ gibt „Objekt“ zurück, wenn er auf null angewendet wird, auch wenn null kein Objekt ist. Dieses Verhalten ist auf die Implementierung von JavaScript zurückzuführen und wurde aus Gründen der Abwärtskompatibilität beibehalten.
console.log(0.1 + 0.2 === 0.3); // Output?
Ausgabe:false
Erklärung: Aufgrund der Art und Weise, wie Gleitkomma-Arithmetik in JavaScript (und vielen Programmiersprachen) funktioniert, entspricht 0,1 0,2 nicht genau 0,3. Stattdessen ergibt sich ein Wert von 0,30000000000000004, was dazu führt, dass der Vergleich „falsch“ zurückgibt.
const a = {}; const b = { key: 'b' }; const c = { key: 'c' }; a[b] = 123; // What happens here? console.log(a[b]); // Output?
Ausgabe: 123
Erklärung: Wenn Sie versuchen, eine Eigenschaft für ein Objekt festzulegen, indem Sie ein anderes Objekt als Schlüssel (a[b]) verwenden, konvertiert JavaScript das Objekt b in eine Zeichenfolge, was zu „[object Object ]". Sie setzen also im Wesentlichen die Eigenschaft „[object Object]“ auf 123, und wenn Sie a[b] protokollieren, wird 123 zurückgegeben.
const arr = [1, 2, 3]; arr[10] = 11; console.log(arr.length); // Output?
Ausgabe: 11
Erklärung: Wenn Sie einem Index einen Wert zuweisen, der größer als die aktuelle Länge des Arrays ist (wie arr[10] = 11), erstellt JavaScript „leere Slots“ im Array für Indizes von 3 bis 9. Die Längeneigenschaft des Arrays spiegelt jedoch den höchsten Index plus eins wider, der in diesem Fall 11 ist.
let x = 1; let y = 2; const obj = { x: 10, y: 20, sum: function() { return this.x + this.y; } }; console.log(obj.sum()); // Output? console.log(obj.sum.call({ x: 100, y: 200 })); // Output? console.log(obj.sum.apply({ x: 1000, y: 2000 })); // Output?
Ausgabe:
Erklärung:
console.log(1 + '1'); // Output? console.log(1 - '1'); // Output?
Ausgabe:
Erklärung:
console.log(typeof null); // Output?
Ausgabe: Die Ausgabe hängt vom Kontext ab, in dem foo aufgerufen wird. Wenn es sich jedoch im globalen Kontext befindet, wird das globale Objekt protokolliert (Fenster in Browsern oder global in Node.js).
Erklärung: In Pfeilfunktionen ist dies lexikalisch gebunden, was bedeutet, dass dieser Wert aus dem umgebenden Kontext verwendet wird. Wenn foo im globalen Bereich aufgerufen wird, verweist dies auf das globale Objekt.
console.log(0.1 + 0.2 === 0.3); // Output?
Ausgabe:
Erklärung: Die Funktion „createCounter“ erstellt einen Abschluss, der seine eigene Zählvariable verwaltet. Jede Methode (Inkrementieren, Dekrementieren, getCount) greift auf dieselbe Zählvariable zu und ändert sie, wodurch ein konsistentes Verhalten gewährleistet wird.
const a = {}; const b = { key: 'b' }; const c = { key: 'c' }; a[b] = 123; // What happens here? console.log(a[b]); // Output?
Ausgabe: [99, 2, 3]
Erklärung: In JavaScript sind Arrays (wie alle Objekte) Referenztypen. Wenn b a zugewiesen wird, verweisen beide Variablen auf dasselbe Array im Speicher. Somit wirkt sich die Änderung von b auf a aus.
const arr = [1, 2, 3]; arr[10] = 11; console.log(arr.length); // Output?
Ausgabe: 3
Erklärung: In diesem Beispiel hat die innere Funktion eine eigene a-Variable, die die a-Variable in der äußeren Funktion überschattet. Wenn console.log(a) innerhalb von Inner aufgerufen wird, bezieht es sich auf das in Inner definierte a, das 3.
istlet x = 1; let y = 2; const obj = { x: 10, y: 20, sum: function() { return this.x + this.y; } }; console.log(obj.sum()); // Output? console.log(obj.sum.call({ x: 100, y: 200 })); // Output? console.log(obj.sum.apply({ x: 1000, y: 2000 })); // Output?
Ausgabe: { a: 1, b: 3, c: 4 }
Erklärung: Die Methode Object.assign() kopiert die Werte aller aufzählbaren Eigenschaften von einem oder mehreren Quellobjekten (obj1 und obj2) in ein Zielobjekt (ein leeres Objekt {}). Wenn dieselbe Eigenschaft in mehreren Quellobjekten vorhanden ist, hat die letzte Eigenschaft Vorrang. Daher überschreibt b: 3 aus obj2 b: 2 aus obj1.
console.log(1 + '1'); // Output? console.log(1 - '1'); // Output?
Ausgabe:undefiniert
Erklärung: JavaScript fügt nach der Return-Anweisung automatisch ein Semikolon ein, wenn ein Zeilenumbruch vorliegt. Daher wird es als return; interpretiert, was undefiniert zurückgibt. Um das Objekt zurückzugeben, sollten Sie die öffnende geschweifte Klammer { in derselben Zeile wie das Schlüsselwort return einfügen.
console.log(typeof null); // Output?
Ausgabe:undefiniert
Erklärung: Die Variable x innerhalb der Funktion foo wird angehoben, aber erst initialisiert, wenn die Zuweisung var x = 2; ist. Wenn also console.log(x); Wird ausgeführt, ist das lokale x deklariert, aber noch nicht zugewiesen, sodass es undefiniert ausgibt.
console.log(0.1 + 0.2 === 0.3); // Output?
Ausgabe: 99
Erklärung: Sowohl a als auch b verweisen auf dasselbe Array im Speicher. Wenn Sie b[0] ändern, ändern Sie auch a[0], da beide auf dasselbe Array verweisen.
const a = {}; const b = { key: 'b' }; const c = { key: 'c' }; a[b] = 123; // What happens here? console.log(a[b]); // Output?
Erklärung:
const arr = [1, 2, 3]; arr[10] = 11; console.log(arr.length); // Output?
Ausgabe: []
Erklärung: Wenn Sie die Längeneigenschaft eines Arrays auf 0 setzen, wird das Array effektiv gelöscht. Daher ist arr jetzt ein leeres Array.
let x = 1; let y = 2; const obj = { x: 10, y: 20, sum: function() { return this.x + this.y; } }; console.log(obj.sum()); // Output? console.log(obj.sum.call({ x: 100, y: 200 })); // Output? console.log(obj.sum.apply({ x: 1000, y: 2000 })); // Output?
Ausgabe: 2
Erklärung: Die innere Funktion verfügt beim Aufruf über eine eigene a-Variable, die 2 ist. Wenn Sie innerFunc() aufrufen, protokolliert sie 2, da sie sich auf die lokale Variable a innerhalb von inner bezieht.
console.log(1 + '1'); // Output? console.log(1 - '1'); // Output?
Ausgabe: 3
Erklärung: Die C-Methode wird für das Objekt aufgerufen, daher bezieht sich dies innerhalb der Methode auf das Objekt. Somit wird die Summe von obj.a und obj.b ausgegeben, die 3 ist.
const foo = () => { console.log(this); }; foo(); // Output?
Erklärung:
console.log(typeof null); // Output?
Ausgabe: globales Objekt (oder undefiniert im strikten Modus)
Erklärung: Im nicht-strikten Modus ist der Wert davon innerhalb einer im globalen Kontext aufgerufenen Funktion das globale Objekt (d. h. Fenster in Browsern oder global in Node.js). Im strikten Modus wäre dies undefiniert.
console.log(0.1 + 0.2 === 0.3); // Output?
Erklärung:
const a = {}; const b = { key: 'b' }; const c = { key: 'c' }; a[b] = 123; // What happens here? console.log(a[b]); // Output?
Ausgabe: 3
Erklärung: In der inneren Funktion bezieht sich a auf die in der äußeren Funktion definierte Variable. Wenn inner aufgerufen wird, wird a von 2 auf 3 erhöht und protokolliert.
const arr = [1, 2, 3]; arr[10] = 11; console.log(arr.length); // Output?
Ausgabe: Hallo, mein Name ist undefiniert
Erläuterung: Wenn Greet ohne Kontext aufgerufen wird (d. h. nicht als Person-Methode), ist dies nicht an die Person gebunden. Im nicht strikten Modus ist dies standardmäßig das globale Objekt, und da der Name nicht für das globale Objekt definiert ist, wird es als undefiniert protokolliert.
let x = 1; let y = 2; const obj = { x: 10, y: 20, sum: function() { return this.x + this.y; } }; console.log(obj.sum()); // Output? console.log(obj.sum.call({ x: 100, y: 200 })); // Output? console.log(obj.sum.apply({ x: 1000, y: 2000 })); // Output?
Erklärung:
console.log(1 + '1'); // Output? console.log(1 - '1'); // Output?
Erklärung: Die foo-Funktion verwaltet einen Abschluss um die Zählvariable, die bei jedem Aufruf von foo inkrementiert wird und ihren Zustand über alle Aufrufe hinweg beibehält.
console.log(typeof null); // Output?
Ausgabe:
Erklärung: a ist aufgrund der Schließung in der zweiten Funktion zugänglich. b ist auch zugänglich, wie es in zuerst definiert ist. c ist lokal für Sekunde, daher werden alle drei Variablen korrekt protokolliert.
console.log(0.1 + 0.2 === 0.3); // Output?
Ausgabe: 3
Erklärung: Die Aufrufmethode ruft die Inkrementierung mit newObj als this auf, sodass sich this.num auf newObj.num bezieht. Die Inkrementierungsoperation ändert newObj.num von 2 auf 3.
const a = {}; const b = { key: 'b' }; const c = { key: 'c' }; a[b] = 123; // What happens here? console.log(a[b]); // Output?
Ausgabe:
const arr = [1, 2, 3]; arr[10] = 11; console.log(arr.length); // Output?
Erklärung: Die setTimeout-Funktionen verweisen aufgrund des Hochziehens alle auf dieselbe i-Variable. Wenn die Zeitüberschreitungen ausgeführt werden, wurde i bereits auf 4 erhöht, was dazu führt, dass 4 dreimal protokolliert wird.
let x = 1; let y = 2; const obj = { x: 10, y: 20, sum: function() { return this.x + this.y; } }; console.log(obj.sum()); // Output? console.log(obj.sum.call({ x: 100, y: 200 })); // Output? console.log(obj.sum.apply({ x: 1000, y: 2000 })); // Output?
Erklärung: Die Kartenfunktion erstellt ein neues Array basierend auf der auf jedes Element angewendeten Transformation. Das ursprüngliche Array bleibt unverändert, während newArray die Inkremente widerspiegelt.
console.log(1 + '1'); // Output? console.log(1 - '1'); // Output?
Ausgabe: Die Ausgabe hängt vom Kontext ab, in dem foo aufgerufen wird. Wenn es sich jedoch im globalen Kontext befindet, wird das globale Objekt protokolliert (Fenster in Browsern oder global in Node.js).
Erklärung: In Pfeilfunktionen ist dies lexikalisch gebunden, was bedeutet, dass dieser Wert aus dem umgebenden Kontext verwendet wird. Wenn foo im globalen Bereich aufgerufen wird, verweist dies auf das globale Objekt.
const foo = () => { console.log(this); }; foo(); // Output?
Ausgabe: 42
Erklärung: Die innere Funktion ist eine Pfeilfunktion, die diese lexikalisch an den Kontext der Methodenfunktion bindet. Daher bezieht sich this.value auf obj.value, also 42.
function createCounter() { let count = 0; return { increment: function() { count++; return count; }, decrement: function() { count--; return count; }, getCount: function() { return count; } }; } const counter = createCounter(); console.log(counter.increment()); // Output? console.log(counter.increment()); // Output? console.log(counter.getCount()); // Output? console.log(counter.decrement()); // Output? console.log(counter.getCount()); // Output?
Ausgabe:ReferenceError
Erklärung: Die Variable x wird innerhalb von myFunction angehoben, was bedeutet, dass sie im Funktionsumfang vorhanden ist, aber erst nach dem console.log(x) initialisiert wird. Dies führt zu einem ReferenceError, da auf die x-Variable vor ihrer Deklaration zugegriffen wird.
console.log(typeof null); // Output?
Ausgabe:Hallo undefiniert
Erklärung:Wenn „greet“ ohne expliziten Kontext aufgerufen wird, bezieht sich dies nicht auf obj, daher ist this.name undefiniert.
console.log(0.1 + 0.2 === 0.3); // Output?
Ausgabe:Nummer
Erklärung: In JavaScript wird NaN (Not-a-Number) als numerischer Typ betrachtet und typeof NaN gibt „Zahl“ zurück.
const a = {}; const b = { key: 'b' }; const c = { key: 'c' }; a[b] = 123; // What happens here? console.log(a[b]); // Output?
Ausgabe: [1, 2, 3, 4]
Erklärung: Sowohl a als auch b verweisen auf dasselbe Array im Speicher. Wenn Sie 4 in b schieben, wirkt sich dies auch auf a aus.
Das obige ist der detaillierte Inhalt vonDie anspruchsvollsten und schwierigsten technischen Javascript-Interviewfragen mit Lösungen.. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!