Code Fix

初級

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パターンを実際に手で直すと、エラーメッセージのどこを読めばよいかが掴めます。

演習をはじめる

関連するエラー

広告
広告スロット(未設定)