Ich bin wirklich verwirrt, wie ich console.log erhalten kann. Log ist keine Funktion in Zeile 1091. Wenn ich den Verschluss unten entferne, beschwert sich Zeile 1091 nicht über einen solchen Fehler. Chrome Version 43.0.2357.130 (64-Bit).
Hier ist der Code:
$scope.columnNameChanged = function (tableColumn) {
setDirtyColumn(tableColumn);
//propagate changes to the key fields
for (var i = 0; i < $scope.tableIndexes.length; ++i) {
for (var j = 0; j < $scope.tableIndexes[i].columnName.length; ++j) {
if ($scope.tableIndexes[i].columnName[j] === tableColumn.previousName) {
console.log('xxx', $scope.tableIndexes[i].columnName[j])
(function (i, j) {
$timeout(function () {
console.log($scope.tableIndexes[i].columnName[j])
$scope.tableIndexes[i].columnName[j] = tableColumn.name.toUpperCase();
console.log($scope.tableIndexes[i].columnName[j])
});
})(i, j);
}
}
}
};
javascript
Qian Chen
quelle
quelle
Antworten:
Lösung
Setzen Sie einfach ein Semikolon (
;
) nachconsole.log(
…)
.Erläuterung
Der Fehler ist so leicht reproduzierbar:
Es wird versucht,
function(){}
als Argument an den Rückgabewert zu übergeben,console.log()
dessen Funktion selbst keine Funktion ist, sondern tatsächlichundefined
(checktypeof console.log();
). Dies liegt daran, dass JavaScript dies als interpretiertconsole.log()(function(){})
.console.log
jedoch ist eine Funktion.Wenn Sie das
console
Objekt nicht hätten , würden Sie sehenWenn Sie das
console
Objekt hätten, aber nicht dielog
Methode, die Sie sehen würdenWas Sie jedoch haben, ist
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:
Ein anderes Beispiel
Sie sehen dies häufig
(...)
bei Verwendung von verketteten Methoden oder verketteten Eigenschaftszugriffsberechtigten:Wenn diese RegEx nicht gefunden wird, gibt die Methode zurück
null
und der Eigenschaft-Accessor onnull
verursacht aTypeError: string.match(...) is null
- der Rückgabewert istnull
. Im Fall vonconsole.log(...)
dem Rückgabewert warundefined
.quelle
console.log()()
seineconsole.log(...)
3 Punkte kein Funktionsfehler sind, sonst sollte es einfachconsole.log
nicht funktionieren (nur wenn es nicht war, aber tatsächlich ist es)object.method
wenn Sie den Rückgabewert verwenden, insbesondere in einer verketteten Methode, wird dies der Fall seinobject.method(...)
. Man muss wissen, warum man immer Semikolons verwenden sollte und wie man JavaScript-Fehlermeldungen richtig interpretiert.Der Fehler bedeutet, dass der Rückgabewert von
console.log()
keine Funktion ist. Ihnen fehlt ein Semikolon:(...)
Dadurch wird das Folgende des IIFE als Funktionsaufruf interpretiert.Vergleichen Sie die Fehlermeldungen von
und
quelle
2020 Update
Eine mögliche Ursache kann die Deklaration
var console
irgendwo in Ihrem Skript sein.Verwenden:
stattdessen. Hat für mich gearbeitet.
Ich hoffe, es hilft
quelle
Es gibt eine andere Möglichkeit, diesen Fehler zu finden.
console.log
ist nicht unveränderlich und es ist möglich, den Wert versehentlich zu überschreiben.In diesem Fall laden Sie die Seite einfach neu, um den Schaden rückgängig zu machen.
quelle
Ich weiß, dass dies nicht "DIE" Antwort ist, dachte aber, ich würde im Folgenden werfen
Ich hatte einen Textbereich auf der Seite, die ich " Konsole " nannte. Plötzlich gaben alle meine console.log () - Skripte den Fehler "Uncaught TypeError: console.log ist keine Funktion bei Object".
... und das zu Recht, weil ich für mein Objekt / var einen reservierten Namespace verwendet habe. Ich erkannte, was ich getan hatte, nachdem ich seinen Beitrag gelesen hatte, und der Nachwelt zuliebe: Namenskonventionen überprüfen.
Prost
"Es ist immer menschliches Versagen"
quelle
Zumindest in React-Native scheint die Konsole ohne Import zu funktionieren. Durch Entfernen
import console = require('console');
oderimport console from 'console';
Anfang meiner Datei wurde dies für mich behoben. (Die VS-Code-IDE scheint dies manchmal automatisch hinzuzufügen.)quelle