Estou realmente confuso sobre como posso obter console.log não é uma função na linha 1091. Se eu remover o fechamento abaixo, a linha 1091 não reclamará desse erro. Versão do Chrome 43.0.2357.130 (64 bits).
Aqui está o código:
$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
fonte
fonte
Respostas:
Solução
Basta colocar um ponto e vírgula (
;
) apósconsole.log(
…)
.Explicação
O erro é facilmente reproduzível desta forma:
Ele está tentando passar
function(){}
como um argumento para o valor de retorno doconsole.log()
qual ele mesmo não é uma função, mas na verdadeundefined
(verifiquetypeof console.log();
). Isso ocorre porque JavaScript interpreta isso comoconsole.log()(function(){})
.console.log
no entanto, é uma função.Se você não tivesse o
console
objeto, você veriaSe você tivesse o
console
objeto, mas não olog
método, veriaO que você tem, no entanto, é
Observe o
(...)
depois do nome da função. Com aqueles, está se referindo ao valor de retorno da função.A quebra de linha não separa essas duas expressões como instruções separadas por causa das regras do JavaScript para inserção automática de ponto e vírgula (ASI) .
Respeite o
;
Todos esses snippets de código resultam em todos os tipos de erros inesperados se nenhum ponto-e-vírgula estiver presente:
Outro exemplo
(...)
Muitas vezes você vê com o uso de métodos encadeados ou acessadores de propriedade encadeados:Se esse RegEx não for encontrado, o método retornará
null
e o acessador de propriedade emnull
causará umTypeError: string.match(...) is null
- o valor de retorno énull
. No casoconsole.log(...)
do valor de retorno foiundefined
.fonte
console.log()()
seusconsole.log(...)
3 pontos não são um erro de função, caso contrário, deveria ser simplesmenteconsole.log
não é função (apenas se não fosse, mas na verdade é)object.method
, se você estiver usando o valor de retorno, especialmente em um método encadeado, seráobject.method(...)
. É preciso muita experiência para saber por que você deve sempre usar ponto- e- vírgula e como interpretar mensagens de erro de JavaScript corretamente.O erro significa que o valor de retorno de
console.log()
não é uma função. Está faltando um ponto e vírgula:o que faz com que o seguinte
(...)
do IIFE seja interpretado como uma chamada de função.Compare as mensagens de erro de
e
fonte
Atualização de 2020
Uma causa possível pode ser a declaração de
var console
algum lugar em seu script.Usar:
em vez de. Funcionou para mim.
Espero que ajude
fonte
Existe outra maneira de encontrar esse erro.
console.log
não é imutável e é possível substituir o valor acidentalmente.Nesse caso, basta recarregar a página para desfazer o dano.
fonte
Eu sei que esta não é a resposta "A", mas pensei em lançar a seguinte
Eu tinha uma área de texto na página que estava chamando de " console ". de repente, todos os meus scripts console.log () exibiram o erro "Uncaught TypeError: console.log não é uma função no objeto"
... e com razão, porque usei um namespace reservado para meu objeto / var. Percebi o que fiz depois de ler sua postagem, e para o bem da posteridade: verifique novamente as convenções de nomenclatura.
Felicidades
"é sempre erro humano"
fonte
Pelo menos no react-native, o console parece funcionar sem nenhuma importação, então, removendo
import console = require('console');
ouimport console from 'console';
desde o início do meu arquivo consertou para mim. (o VS Code IDE parece adicionar isso automaticamente às vezes)fonte