Lösung
Setzen Sie einfach ein Semikolon ( ;
) nach console.log(
… )
.
Erläuterung
Der Fehler ist so leicht reproduzierbar:
console.log()
(function(){})
Es wird versucht, function(){}
als Argument an den Rückgabewert zu übergeben, console.log()
dessen Funktion selbst keine Funktion ist, sondern tatsächlich undefined
(check typeof console.log();
). Dies liegt daran, dass JavaScript dies als interpretiert console.log()(function(){})
. console.log
jedoch ist eine Funktion.
Wenn Sie das console
Objekt nicht hätten , würden Sie sehen
ReferenceError: Konsole ist nicht definiert
Wenn Sie das console
Objekt hätten, aber nicht die log
Methode, die Sie sehen würden
TypeError: console.log ist keine Funktion
Was Sie jedoch haben, ist
TypeError: console.log (...) ist keine Funktion
Beachten Sie den (...)
nach dem Funktionsnamen. Bei diesen bezieht es sich auf den Rückgabewert der Funktion.
Der Zeilenumbruch trennt diese beiden Ausdrücke aufgrund der JavaScript- Regeln für das automatische Einfügen von Semikolons (ASI) nicht als separate Anweisungen .
Respektiere die ;
Alle diese Codefragmente führen zu allen möglichen unerwarteten Fehlern, wenn keine Semikolons vorhanden sind:
console.log() // As covered before
() // TypeError: console.log(...) is not a function
console.log() // Accessing property 0 of property 1 of the return value…
[1][0] // TypeError: console.log(...) is undefined
console.log() // Like undefined-3
-3 // NaN
let a, b;
const array = Array.from({ length: 2 })
// Now, let’s use destructuring:
[a, b] = array; // ReferenceError: can't access lexical declaration 'array' before initialization
let a, b;
const array = Array.from({ length: 2 }).fill(1),
array2 = Array.from({ length: 2 })
// Now, let’s use destructuring. Attempt to get the two 1’s from `array` as `a` and `b`:
[a, b] = array;
console.log(a, b); // undefined undefined
Ein anderes Beispiel
Sie sehen dies häufig (...)
bei Verwendung von verketteten Methoden oder verketteten Eigenschaftszugriffsberechtigten:
string.match(/someRegEx/)[0]
Wenn diese RegEx nicht gefunden wird, gibt die Methode zurück null
und der Eigenschaft-Accessor on null
verursacht a TypeError: string.match(...) is null
- der Rückgabewert ist null
. Im Fall von console.log(...)
dem Rückgabewert war undefined
.