Heim >Web-Frontend >js-Tutorial >Die anspruchsvollsten und schwierigsten technischen Javascript-Interviewfragen mit Lösungen.

Die anspruchsvollsten und schwierigsten technischen Javascript-Interviewfragen mit Lösungen.

Susan Sarandon
Susan SarandonOriginal
2024-10-19 14:31:02729Durchsuche

Hallo! Ich bin Vishal Tiwari und werde Ihnen einige herausfordernde Javascript-Interviewfragen stellen.

1. Was wird die Ausgabe des folgenden Codes sein?

console.log(typeof null); // Output?

Antwort:

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.


2. Was wird die Ausgabe des folgenden Codes sein?

console.log(0.1 + 0.2 === 0.3); // Output?

Antwort:

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.


3. Was wird die Ausgabe des folgenden Codes sein?

const a = {};
const b = { key: 'b' };
const c = { key: 'c' };

a[b] = 123; // What happens here?
console.log(a[b]); // Output?

Antwort:

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.


4. Was wird die Ausgabe des folgenden Codes sein?

const arr = [1, 2, 3];
arr[10] = 11;
console.log(arr.length); // Output?

Antwort:

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.


5. Was wird die Ausgabe des folgenden Codes sein?

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?

Antwort:

Ausgabe:

  • Erstes console.log: 30
  • Zweites console.log: 300
  • Drittes console.log: 3000

Erklärung:

  • obj.sum() verwendet den this-Kontext von obj, addiert also 10 und 20 und gibt 30 zurück.
  • obj.sum.call({ x: 100, y: 200 }) verwendet die Call-Methode, um dies in ein neues Objekt mit x- und y-Werten von 100 bzw. 200 zu ändern und 300 zurückzugeben.
  • obj.sum.apply({ x: 1000, y: 2000 }) macht dasselbe mit apply und gibt 3000 zurück.

6. Was wird die Ausgabe des folgenden Codes sein?

console.log(1 + '1'); // Output?
console.log(1 - '1'); // Output?

Antwort:

Ausgabe:

  • Erstes console.log: '11'
  • Zweites console.log: 0

Erklärung:

  • In 1 „1“ führt JavaScript eine Typerzwingung durch und wandelt die Zahl 1 in eine Zeichenfolge um, was zu „11“ führt.
  • In 1 - '1' wandelt JavaScript die Zeichenfolge '1' in eine Zahl um, was zu 1 - 1 führt, was 0 entspricht.

7. Was wird die Ausgabe des folgenden Codes sein?

console.log(typeof null); // Output?

Antwort:

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.


8. Was wird die Ausgabe des folgenden Codes sein?

console.log(0.1 + 0.2 === 0.3); // Output?

Antwort:

Ausgabe:

  • Erstes console.log: 1
  • Zweites console.log: 2
  • Drittes console.log: 2
  • Viertes console.log: 1
  • Fünftes console.log: 1

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.


9. Was wird die Ausgabe des folgenden Codes sein?

const a = {};
const b = { key: 'b' };
const c = { key: 'c' };

a[b] = 123; // What happens here?
console.log(a[b]); // Output?

Antwort:

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.


10. Was wird die Ausgabe des folgenden Codes sein?

const arr = [1, 2, 3];
arr[10] = 11;
console.log(arr.length); // Output?

Antwort:

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.

ist

11. Was wird die Ausgabe des folgenden Codes sein?

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?

Antwort:

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.


12. Was wird die Ausgabe des folgenden Codes sein?

console.log(1 + '1'); // Output?
console.log(1 - '1'); // Output?

Antwort:

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.


13. Was wird die Ausgabe des folgenden Codes sein?

console.log(typeof null); // Output?

Antwort:

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.


14. Was wird die Ausgabe des folgenden Codes sein?

console.log(0.1 + 0.2 === 0.3); // Output?

Antwort:

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.


15. Was wird die Ausgabe des folgenden Codes sein?

const a = {};
const b = { key: 'b' };
const c = { key: 'c' };

a[b] = 123; // What happens here?
console.log(a[b]); // Output?

Antwort:

  • Erstes console.log: „123“
  • Zweites console.log: „33“

Erklärung:

  • In 1 „2“ „3“ wandelt JavaScript 1 in eine Zeichenfolge um und verkettet sie, was zu „12“ und dann „123“ führt.
  • In 1 2 „3“ wertet JavaScript zunächst 1 2 aus, was 3 (einer Zahl) entspricht, und verkettet dann „3“, was zu „33“ führt.

16. Was wird die Ausgabe des folgenden Codes sein?

const arr = [1, 2, 3];
arr[10] = 11;
console.log(arr.length); // Output?

Antwort:

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.


17. Was wird die Ausgabe des folgenden Codes sein?

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?

Antwort:

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.


18. Was wird die Ausgabe des folgenden Codes sein?

console.log(1 + '1'); // Output?
console.log(1 - '1'); // Output?

Antwort:

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.


19. Was wird die Ausgabe des folgenden Codes sein?

const foo = () => {
    console.log(this);
};

foo(); // Output?

Antwort:

  • Erstes console.log: false
  • Zweites console.log: true

Erklärung:

  • Die erste Anweisung gibt aufgrund von Problemen mit der Gleitkommagenauigkeit „falsch“ zurück (0,1 0,2 entspricht 0,30000000000000004).
  • Die zweite Anweisung rundet 0,1 0,2 mit toFixed(1) auf 0,3 und wandelt es zurück in eine Zahl um, was zu einem Vergleich von 0,3 === 0,3 führt, was wahr ist.

20. Was wird die Ausgabe des folgenden Codes sein?

console.log(typeof null); // Output?

Antwort:

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.

21. Was wird die Ausgabe des folgenden Codes sein?

console.log(0.1 + 0.2 === 0.3); // Output?

Antwort:

  • Erstes console.log: 2
  • Zweites console.log: 1

Erklärung:

  • Object.assign(obj3, obj2) kopiert Eigenschaften von obj2 nach obj3, sodass obj3.a zu 2 wird.
  • obj3.__proto__ bezieht sich auf obj1, das die Eigenschaft a mit dem Wert 1 hat.

22. Was wird die Ausgabe des folgenden Codes sein?

const a = {};
const b = { key: 'b' };
const c = { key: 'c' };

a[b] = 123; // What happens here?
console.log(a[b]); // Output?

Antwort:

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.


23. Was wird die Ausgabe des folgenden Codes sein?

const arr = [1, 2, 3];
arr[10] = 11;
console.log(arr.length); // Output?

Antwort:

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.


24. Was wird die Ausgabe des folgenden Codes sein?

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?

Antwort:

  • Erstes console.log: wahr
  • Zweites console.log: true

Erklärung:

  • Für console.log([1] == true) wird das Array [1] in einen primitiven Typ konvertiert, was zu 1 führt, und 1 == true ist wahr.
  • Für console.log([0] == false) wird das Array [0] in 0 konvertiert, und 0 == false ist ebenfalls wahr.

25. Was wird die Ausgabe des folgenden Codes sein?

console.log(1 + '1'); // Output?
console.log(1 - '1'); // Output?

Antwort:

  • Erstes foo(): 1
  • Zweites foo(): 2
  • Drittes foo(): 3

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.


26. Was wird die Ausgabe des folgenden Codes sein?

console.log(typeof null); // Output?

Antwort:

Ausgabe:

  • Erstes console.log(a): 1
  • Zweites console.log(b): 2
  • Drittes console.log(c): 3

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.


27. Was wird die Ausgabe des folgenden Codes sein?

console.log(0.1 + 0.2 === 0.3); // Output?

Antwort:

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.


28. Was wird die Ausgabe des folgenden Codes sein?

const a = {};
const b = { key: 'b' };
const c = { key: 'c' };

a[b] = 123; // What happens here?
console.log(a[b]); // Output?

Antwort:

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.


29. Was wird die Ausgabe des folgenden Codes sein?

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?

Antwort:

  • Array: [1, 2, 3]
  • newArray: [2, 3, 4]

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.


30. Was wird die Ausgabe des folgenden Codes sein?

console.log(1 + '1'); // Output?
console.log(1 - '1'); // Output?

Antwort:

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.


31. Was wird die Ausgabe des folgenden Codes sein?

const foo = () => {
    console.log(this);
};

foo(); // Output?

Antwort:

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.


32. Was wird die Ausgabe des folgenden Codes sein?

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?

Antwort:

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.


33. Was wird die Ausgabe des folgenden Codes sein?

console.log(typeof null); // Output?

Antwort:

Ausgabe:Hallo undefiniert

Erklärung:Wenn „greet“ ohne expliziten Kontext aufgerufen wird, bezieht sich dies nicht auf obj, daher ist this.name undefiniert.


34. Was wird die Ausgabe des folgenden Codes sein?

console.log(0.1 + 0.2 === 0.3); // Output?

Antwort:

Ausgabe:Nummer

Erklärung: In JavaScript wird NaN (Not-a-Number) als numerischer Typ betrachtet und typeof NaN gibt „Zahl“ zurück.


35. Was wird die Ausgabe des folgenden Codes sein?

const a = {};
const b = { key: 'b' };
const c = { key: 'c' };

a[b] = 123; // What happens here?
console.log(a[b]); // Output?

Antwort:

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.

Top Challenging and hardest javascript technical interview questions with solutions.

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn