Estoy realmente confundido sobre cómo puedo obtener que console.log no sea una función en la línea 1091. Si elimino el cierre a continuación, la línea 1091 no se queja de tal error. Versión de Chrome 43.0.2357.130 (64 bits).
Aquí está el 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
fuente
fuente
Respuestas:
Solución
Simplemente ponga un punto y coma (
;
) después deconsole.log(
…)
.Explicación
El error se puede reproducir fácilmente así:
Está tratando de pasar
function(){}
como un argumento al valor de retorno delconsole.log()
cual en sí mismo no es una función sino en realidadundefined
(verifiquetypeof console.log();
). Esto se debe a que JavaScript lo interpreta comoconsole.log()(function(){})
.console.log
sin embargo es una función.Si no tuvieras el
console
objeto, veríasSi tuvieras el
console
objeto pero no ellog
método, veríasLo que tienes, sin embargo, es
Tenga en cuenta el
(...)
después del nombre de la función. Con esos se refiere al valor de retorno de la función.El salto de línea no separa estas dos expresiones como declaraciones separadas debido a las reglas de JavaScript para la inserción automática de punto y coma (ASI) .
Respeta el
;
Todos estos fragmentos de código dan como resultado todo tipo de errores inesperados si no hay ningún punto y coma:
Otro ejemplo
A
(...)
menudo se ven con el uso de métodos encadenados o accesos de propiedad encadenados:Si no se encuentra esa expresión regular, el método volverá
null
y el descriptor de acceso de propiedad ennull
provocará unTypeError: string.match(...) is null
- el valor de retorno esnull
. En el caso deconsole.log(...)
la valor de retorno eraundefined
.fuente
console.log()()
susconsole.log(...)
3 puntos no un error de función, de lo contrario, debe sido simplementeconsole.log
no es la función (sólo si se suponía, pero en realidad es)object.method
, si está utilizando el valor de retorno, especialmente en un método encadenado, lo seráobject.method(...)
. Se necesita experiencia para saber por qué siempre debe usar punto y coma y cómo interpretar correctamente los mensajes de error de JavaScript.El error significa que el valor de retorno de
console.log()
no es una función. Falta un punto y coma:lo que hace que el seguimiento
(...)
del IIFE se interprete como una llamada de función.Compare los mensajes de error de
y
fuente
Actualización 2020
Una posible causa puede ser la declaración de
var console
algún lugar de su script.Utilizar:
en lugar. Trabajó para mi.
Espero que ayude
fuente
Hay otra forma de encontrar este error.
console.log
no es inmutable y es posible sobrescribir accidentalmente el valor.En este caso, vuelva a cargar la página para deshacer el daño.
fuente
Sé que esta no es "LA" respuesta, pero pensé que incluiría lo siguiente
Tenía un área de texto en la página que estaba llamando " consola ". de repente, todos mis scripts de console.log () dieron el error "Uncaught TypeError: console.log no es una función en Object"
... y con razón, porque utilicé un espacio de nombres reservado para mi objeto / var. Me di cuenta de lo que había hecho después de leer su publicación, y por el bien de la posteridad: verificar las convenciones de nombres.
salud
"es siempre un error humano"
fuente
En react-native al menos, la consola parece funcionar sin ninguna importación, por lo que, al eliminar
import console = require('console');
oimport console from 'console';
desde el principio de mi archivo, lo solucionó. (el VS Code IDE parece agregar eso automáticamente a veces)fuente