エラーメッセージ
TypeError: "x" is not a function
エラーの種類
エラーの原因
関数でないものを、関数呼び出ししようとした際に発生するエラーです。また適切な関数が定義されていることを期待されているが、定義されていない場合も発生します。
関数名のタイプミスをしていないか確認してみましょう。また、呼び出そうとしてるオブジェクトがそのメソッドを持っているかどうかも確認してみてください。配列オブジェクトが持っている map 関数を、それを持たない通常のオブジェクトに対して呼び出そうとしている場合が、後者の例になります。
多くの組み込み関数はコールバック関数を必要とします。これらのメソッドを正しく呼び出すためには、関数を引数に指定する必要があります:
Array
もしくはTypedArray
オブジェクトを操作する場合:-
Map
もしくはSet
を操作する場合:
このエラーを起こすコードの例
関数名のタイプミス
次のように関数名を間違っている場合に発生します。なおこのミスは非常に多くはっせいします:
var x = document.getElementByID("foo"); // TypeError: document.getElementByID is not a function
正しい関数名は getElementById
です:
var x = document.getElementById("foo");
間違ったオブジェクトに対する関数呼び出し
いくつかのメソッドは、引数に関数が指定されていることを期待していて、しかも特定のオブジェクトの上でのみ正しく動作するものがあります。この典型例が Array.prototype.map()
で、これは Array
オブジェクトでのみただしく動作します。
var obj = { a: 13, b: 37, c: 42 }; obj.map(function(num) { return num * 2; }); // TypeError: obj.map is not a function
オブジェクトではなく、配列を利用しましょう:
var numbers = [1, 4, 9]; numbers.map(function(num) { return num * 2; }); // Array [ 2, 8, 18 ]