本で紹介しきれなかったエラーメッセージや、p5.jsのウェブエディターのバージョンアップで変更のあったメッセージを掲載しています。
調べるときはブラウザーの検索機能を使うと便利です。Chrome の場合、ショートカットは Ctrl-F(⌘-F) です。
エラーと警告
実行したときにプログラムが途中で止まってしまうのが“エラー”です。それに対して、コードエディターに色は付くけれど、ひとまずプログラムは動くのは“警告(ワーニング)”です。警告は「間違っているかもしれないよ」という、言葉どおりの警告(けいこく)です。
エラーは、本でも説明したとおり、コードエディターの行番号に赤色の背景が付き、エラーの原因になっていそうなコードにも赤色の波線がつきます(ただし、必ずしも波線部分が原因とは限りません)。プログラムを実行すると強制停止し、コンソールにメッセージが表示されます。
一方、警告のほうは、コードエディターの表示がうすい黄色なのであまり目立ちません。そして、プログラムを実行してもコンソールにはメッセージは表示されないことがあります。では、どこで警告の内容を知ることができるかというと、コードエディターの黄色くなった行番号にマウスポインターを重ねると表示されます。(一方、コンソールにだけ表示される警告もあります)
警告は、プログラムコードとして正しい(こちらの意図どおり)でも表示されることがあります。その場合は無視して構いません。
エラー
メッセージの「****」の部分には、みなさんのコードの中にある文言が入ります。「変数」という表現には定数も含みます。
- ReferenceError: start is not defined
- 参照エラー: start は定義されていません。
- 「ピゴニャンのスケッチ」を使用していないときにこのエラーが出ます。ここから「ピゴニャンのスケッチ」を開き、別名で保存してから進めてください。
- ReferenceError: **** is not defined
- 参照エラー: **** は定義されていません。
- 変数名が間違えていないか確認してください。間違えていない場合は、別のスコープ({ }の範囲)で宣言されている可能性があります(12.2節)。
- SyntaxError: await is only valid in async functions and the top level bodies of modules
- 構文エラー: awaitはasyncの付いた関数の中か、モジュールの一番外側でしか有効ではありません。
- awaitが付いた関数(sleepやsayFor)を中で呼び出している関数宣言のasyncをつける必要があります。あるいは、function draw () {の先頭のasyncを削除してしまっていないか確認してください。
- SyntaxError: Unexpected identifier '****'
- 構文エラー: 予想外の識別子 **** があります。(識別子というのは変数名や関数名のことで、予想外の…というのはつまり「おかしいよ」ということです。)
- 変数名や関数名が間違えていないか、名前の途中に空白(スペース)が入っていないか確認してください。if文の ( ) 内の構文が間違っているときにもこのエラーが生じます。
- SyntaxError: Identifier '****' has already been declared
- 構文エラー: 識別子 **** はすでに宣言されています。
- 同じ変数を別の場所で定義していないか確認してください。
- ReferenceError: Cannot access '****' before initialization
- 参照エラー: 初期化する前に **** にアクセスすることはできません。
- 同じコードの中で呼び出している関数の名前を使って、変数宣言しようとしていないか確認してください。
- TypeError: **** is not a function
- 型エラー: **** は関数ではありません。
- 同じコードの中で宣言されている変数を、関数として呼び出そうとしています。使いたい関数と同じ名前の変数名を宣言してしまっていたら、変数名のほうを置きかえてください。あるいは、変数を関数として使おうとしていないか確認してください。
- SyntaxError: Unexpected reserved word
- 構文エラー: 予想外の予約語があります。(そこに予約語があるのはおかしいよ…ということです)
- 予約語(await など)を変数名として使おうとしていないか確認してください。
- SyntaxError: Unexpected token '****'
- 構文エラー: 予想外のトークン **** があります。(ここでのトークンとは文字列のことです)
- 予約語(if など)を変数名として使おうとしていないか確認してください。
- SyntaxError: Unexpected end of input
- 構文エラー: 入力の終わりが予想外です。(コードの終わりがおかしい…ということです)
- すべての波カッコ { } がきちんとペアでそろっているか確認してください。また、変数宣言が途中になっている場合(let や const だけ書かれている)にもこのエラーが生じます。
- SyntaxError: Unexpected token ')'
- 予想外のトークン ) があります。
- if文などの ( ) 内の構文が間違っていないか確認してください。
警告
メッセージの「****」の部分には、みなさんのコードの中にある文言が入ります。「変数」という表現には定数も含みます。
- 'async function' is only available in ES8 (use 'esversion: 8').
- “async”の付いた関数は ES8 というバージョンのJavaScriptでしか使えません。
- 先頭2行のおまじないを消していないか確認してください。
- Expected a conditional expression and instead saw an assignment.
- 代入ではなく、条件文を記述してください。
- 「等しい」を表す比較演算子は == あるいは === です。等号 = がひとつになっていないか確認してください。
- ['****'] is better written in dot notation.
- ['****'] という部分はドット記法で記述したほうが良いです。
- ブラケット記法は「変数に代入されたプロパティ名」を使って要素にアクセスする場合にのみ使います。(本にしたがって試しに記述してみた場合は、この警告は無視してください)
- p5.js says: you have used a p5.js reserved function "****" make sure you change the function name to something else.(実行時にコンソールに表示)
- あなたはp5.jsが予約している **** という関数名を他の何かに変えようとしています。
- 本では解説していませんが、p5.jsのライブラリーで定義されている関数名を、自分のコードの変数名や関数名に使おうとしたときに表示される警告です。別の変数名/関数名を選んでください。