Saya benar-benar bingung bagaimana saya bisa mendapatkan console.log bukanlah fungsi pada baris 1091. Jika saya menghapus penutupan di bawah ini, baris 1091 tidak mengeluh kesalahan seperti itu. Versi Chrome 43.0.2357.130 (64-bit).
Ini kodenya:
$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
sumber
sumber
Jawaban:
Larutan
Sederhananya titik koma (
;
) setelahconsole.log(
…)
.Penjelasan
Kesalahan mudah direproduksi seperti ini:
console.log() (function(){})
Ini berusaha untuk lulus
function(){}
sebagai argumen dengan nilai kembali dariconsole.log()
yang itu sendiri bukan fungsi tetapi sebenarnyaundefined
(cektypeof console.log();
). Ini karena JavaScript menafsirkan ini sebagaiconsole.log()(function(){})
.console.log
bagaimanapun adalah sebuah fungsi.Jika Anda tidak memiliki
console
objek yang Anda lihatJika Anda memiliki
console
objek tetapi bukanlog
metode yang akan Anda lihatApa yang Anda miliki, bagaimanapun, adalah
Catat
(...)
setelah nama fungsi. Dengan itu, itu mengacu pada nilai kembali dari fungsi tersebut.Jeda baris tidak memisahkan kedua ekspresi ini sebagai pernyataan terpisah karena aturan JavaScript untuk penyisipan titik koma otomatis (ASI) .
Hormati
;
Semua cuplikan kode ini menghasilkan semua jenis kesalahan tak terduga jika tidak ada titik koma:
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
Contoh lain
Anda
(...)
sering kali melihat penggunaan metode berantai atau pengakses properti berantai:string.match(/someRegEx/)[0]
Jika RegEx itu tidak ditemukan, metode akan kembali
null
dan pengakses propertinull
akan menyebabkanTypeError: string.match(...) is null
- nilai yang dikembalikan adalahnull
. Dalam kasusconsole.log(...)
nilai kembali ituundefined
.sumber
console.log()()
yangconsole.log(...)
3 titik bukan kesalahan fungsi, selain itu harus menjadi hanyaconsole.log
tidak fungsi (hanya jika itu bukankah namun sebenarnya)object.method
, jika Anda menggunakan nilai kembalian, terutama dalam metode berantai, itu akan menjadiobject.method(...)
. Dibutuhkan pengalaman untuk mengetahui mengapa Anda harus selalu menggunakan titik koma, dan bagaimana menafsirkan pesan kesalahan JavaScript dengan benar.Pembaruan 2020
Salah satu kemungkinan penyebabnya adalah deklarasi
var console
suatu tempat di skrip Anda.Menggunakan:
window.console.log(...);
sebagai gantinya. Bekerja untuk saya.
Saya harap ini membantu
sumber
Kesalahan berarti bahwa nilai kembali dari
console.log()
tidak fungsi. Anda kehilangan titik koma:console.log('xxx', $scope.tableIndexes[i].columnName[j]); // ^
yang membuat
(...)
IIFE berikut ini diinterpretasikan sebagai panggilan fungsi.Bandingkan pesan kesalahan dari
> var foo = {bar: undefined}; > foo.bar(); Uncaught TypeError: foo.bar is not a function
dan
> var foo = {bar: function(){}}; > foo.bar()(); Uncaught TypeError: foo.bar(...) is not a function
sumber
Ada cara lain untuk menghadapi kesalahan ini.
console.log
tidak dapat diubah dan nilai dapat ditimpa secara tidak sengaja.console.log = 'hi';
Dalam hal ini, muat ulang halaman untuk membatalkan kerusakan.
sumber
Saya tahu ini bukan jawaban "THE", tetapi saya pikir saya akan melemparkan yang berikut ini
var console = $( data.message_target ); console.val( console.val() + data.message); console.scrollTop(console[0].scrollHeight - console.height());
Saya memiliki textarea di halaman yang saya sebut " konsol ". tiba-tiba semua skrip console.log () saya memberikan pesan kesalahan "Tidak Tertangkap TypeError: console.log bukan fungsi di Objek"
... dan memang demikian, karena saya menggunakan namespace yang dicadangkan untuk objek / var saya. Saya menyadari apa yang telah saya lakukan setelah membaca postingannya, dan demi anak cucu: periksa ulang konvensi penamaan.
Bersulang
"itu selalu kesalahan manusia"
sumber
Setidaknya dalam react-native, konsol tampaknya berfungsi tanpa impor apa pun, jadi, menghapus
import console = require('console');
atauimport console from 'console';
dari awal file saya memperbaikinya untuk saya. (VS Code IDE tampaknya menambahkannya secara otomatis kadang-kadang)sumber