length はメソッドでなくプロパティという原因
配列や文字列の要素数はlengthというプロパティで取得します。他言語のsize()やcount()のような感覚でlength()と関数呼び出しの形で書くとエラーになります。
エラーメッセージの読み方
main.js:2
main.js- ファイル名
2- 行番号 — 実際にクラッシュした行
TypeError- 例外クラス — 何が起きたか。ここを検索するのが最短です
nums.length is not a function- 内容 — 期待していたもの、または受け付けられなかったもの
このエラーが出る典型パターン
パターン1
1 const nums = [1, 2, 3]; 2 console.log(nums.length() ); ^
main.js:2
console.log(nums.length());
^
TypeError: nums.length is not a function
lengthは括弧を付けずに参照するプロパティです。関数のように呼び出すとエラーになります。
直し方: () を (空) にします。
広告
広告スロット(未設定)
パターン2
1 const letters = ["a", "b", "c", "d"]; 2 console.log(letters.length() ); ^
main.js:2
console.log(letters.length());
^
TypeError: letters.length is not a function
配列でも文字列でも、要素数の取得は括弧なしのlengthプロパティです。
直し方: () を (空) にします。
パターン3
1 const queue = ["x", "y"]; 2 console.log(queue.length() ); ^
main.js:2
console.log(queue.length());
^
TypeError: queue.length is not a function
他言語のsize()やcount()の感覚でlength()と書くとエラーになります。
直し方: () を (空) にします。
よくある誤解
他言語の経験から「要素数の取得はメソッド呼び出しのはず」と思い込むと、JavaScriptのlengthは括弧を付けないプロパティだという点でつまずきます。
まとめ
length はメソッドでなくプロパティという原因は初級でつまずきやすい項目です。上の3パターンを実際に手で直すと、エラーメッセージのどこを読めばよいかが掴めます。