Я действительно не понимаю, как я могу получить console.log не является функцией в строке 1091. Если я удалю закрытие ниже, строка 1091 не будет жаловаться на такую ошибку. Версия Chrome 43.0.2357.130 (64-разрядная).
Вот код:
$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
Цянь Чен
источник
источник
Ответы:
Решение
Просто поставьте точку с запятой (
;
) послеconsole.log(
…)
.Объяснение
Ошибка легко воспроизводится следующим образом:
console.log() (function(){})
Он пытается передать в
function(){}
качестве аргумента возвращаемого значения изconsole.log()
которых сами по себе не является функция , но на самом делеundefined
(проверкаtypeof console.log();
). Это потому, что JavaScript интерпретирует это какconsole.log()(function(){})
.console.log
Однако это функция.Если бы у вас не было
console
объекта, который вы бы увиделиЕсли бы у вас был
console
объект, но неlog
метод, который вы бы увиделиОднако у вас есть
Обратите внимание на
(...)
после имени функции. Это относится к возвращаемому значению функции.Разрыв строки не разделяет эти два выражения как отдельные операторы из-за правил JavaScript для автоматической вставки точки с запятой (ASI) .
Уважайте
;
Все эти фрагменты кода приводят к всевозможным неожиданным ошибкам, если нет точек с запятой:
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
Другой пример
Вы
(...)
часто видите, что с использованием связанных методов или связанных методов доступа к свойствам:string.match(/someRegEx/)[0]
Если RegEx не найден, этот метод будет возвращать
null
и свойство сбруя наnull
причинитTypeError: string.match(...) is null
- возвращаемое значение являетсяnull
. В случаеconsole.log(...)
с возвращаемым значением былоundefined
.источник
console.log()()
егоconsole.log(...)
3 точки не являются ошибкой функции, иначе это должно быть простоconsole.log
не функция (только если это не было, но на самом деле это так)object.method
, если вы используете возвращаемое значение, особенно в цепном методе, так оно и будетobject.method(...)
. Требуется некоторый опыт, чтобы знать, почему вы всегда должны использовать точки с запятой и как правильно интерпретировать сообщения об ошибках JavaScript.Ошибка означает , что возвращаемое значение из
console.log()
не является функцией. Вам не хватает точки с запятой:console.log('xxx', $scope.tableIndexes[i].columnName[j]); // ^
что делает следующее
(...)
из IIFE интерпретируется как вызов функции.Сравните сообщения об ошибках
> var foo = {bar: undefined}; > foo.bar(); Uncaught TypeError: foo.bar is not a function
а также
> var foo = {bar: function(){}}; > foo.bar()(); Uncaught TypeError: foo.bar(...) is not a function
источник
Обновление 2020
Одной из возможных причин может быть объявление
var console
где-то в вашем скрипте.Использование:
window.console.log(...);
вместо. Работал у меня.
Я надеюсь, что это помогает
источник
Есть еще один способ столкнуться с этой ошибкой.
console.log
не является неизменным, и значение можно случайно перезаписать.console.log = 'hi';
В этом случае просто перезагрузите страницу, чтобы устранить повреждение.
источник
Я знаю, что это не тот ответ, но подумал, что бросил бы следующий
var console = $( data.message_target ); console.val( console.val() + data.message); console.scrollTop(console[0].scrollHeight - console.height());
У меня было текстовое поле на странице, которую я называл « консоль ». внезапно все мои скрипты console.log () выдали ошибку «Uncaught TypeError: console.log не является функцией объекта»
... и это правильно, потому что я использовал зарезервированное пространство имен для своего объекта / var. Я понял, что сделал после прочтения его поста и ради потомства: дважды проверял соглашения об именах.
ура
"это всегда человеческая ошибка"
источник
По крайней мере, в react-native консоль, похоже, работает без какого-либо импорта, поэтому удаление
import console = require('console');
илиimport console from 'console';
начало моего файла исправили это для меня. (кажется, что VS Code IDE иногда добавляет это автоматически)источник