質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

3回答

2825閲覧

Uncaught ReferenceError: com is not definedの解決方法

ocha9

総合スコア23

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

0クリップ

投稿2019/06/23 21:27

編集2019/06/23 21:44

イメージ説明

java scriptで、クロームで検証したところ

Uncaught ReferenceError: com is not definedが、25行目で出て,25行目は、

javascript

1コード 2if (hum === com) { 

です。

写真のじゃんけんの手を入れた際に勝ちました。負けました。あいこです。が

でません。

エラーメッセージを直訳すると「参照されないReferenceError:comが定義されていません」

最初のアラートの「半角数字で1~3の数字を入力してください。」は出ます。その後の

写真の部分が出ない状況です。

こちらの解決策を教えてください。

javascript

1コード 2const GU = 1; 3const CHOKI = 2; 4const PA = 3; 5 6let hum = prompt('半角数字で1~3の数字を入力してください。\n\n' + GU + ':グー\n' + CHOKI + ':チョキ\n' + PA + ':パー'); 7hum = parseInt(hum, 10); 8if (hum !== GU && hum !== CHOKI && hum !== PA) { 9 alert('入力値をうまく認識できまんでした。ブラウザを再読み込みするともう一度挑戦できます。'); 10} else { 11 let com = Math.floor(Math.random() * 3) + 1; 12 let comHandName = ''; 13 switch (com) { 14 case GU: 15 comHandName = 'グー'; 16 break; 17 case CHOKI: 18 comHandName = 'チョキ'; 19 break; 20 case PA: 21 comHandName = 'パー'; 22 break; 23 } 24} 25 let msgResult = ''; 26 if (hum === com) { 27 msgResult = '結果はあいこでした。'; 28 } else if ((com === GU && hum === PA) || (com === CHOKI && hum === GU) || (com === PA && hum === CHOKI)) { 29 msgResult = '勝ちました。'; 30 } else { 31 msgResult = '負けました。'; 32 } 33 msgResult = msgResult + 'コンピュータの出した手は「' + comHandName + '」でした'; 34 alert(msgResult); 35 36

参考までに正解があるので、正解を記述しておきます。

参考は、最後の結果も表示されます。

javascript

1コード 2// ジャンケンの手の番号を設定 3const GU = 1; 4const CHOKI = 2; 5const PA = 3; 6 7// ジャンケンの入力ダイアログボックスを表示 8let hum = prompt('半角数字で1~3の数字を入力してください。\n\n' + GU + ':グー\n' + CHOKI + ':チョキ\n' + PA + ':パー'); 9hum = parseInt(hum, 10); 10 11// 入力値のチェック 12if (hum !== GU && hum !== CHOKI && hum !== PA) { 13 // 入力値が不適切な場合 14 alert('入力値をうまく認識できませんでした。ブラウザを再読み込みすると、もう一度挑戦できます。'); 15} else { 16 17 // コンピュータの手を決める 18 let com = Math.floor(Math.random() * 3) + 1; 19 20 // コンピュータの手の名前 21 let comHandName = ''; 22 switch (com) { 23 case GU: 24 comHandName = 'グー'; 25 break; 26 case CHOKI: 27 comHandName = 'チョキ'; 28 break; 29 case PA: 30 comHandName = 'パー'; 31 break; 32 } 33 34 // 結果の判定 35 let msgResult = ''; 36 if (hum === com) { 37 msgResult = '結果はあいこでした。'; 38 } else if ((com === GU && hum === PA) || (com === CHOKI && hum === GU) || (com === PA && hum === CHOKI)) { 39 msgResult = '勝ちました。'; 40 } else { 41 msgResult = '負けました。'; 42 } 43 44 // 最終的な結果の表示 45 msgResult = msgResult + 'コンピュータの出した手は「' + comHandName + '」でした'; 46 alert(msgResult); 47} 48 49

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2019/06/23 21:33

25行目はどこでしょうか。console.log()などで処理や変数の動きを追ってデバッグしてみましたか?
ocha9

2019/06/23 21:51

console.log()は使いました。処理や変数の動きもおっていますが、25行目がなぜ引っかかるのか分からない状況です。
m.ts10806

2019/06/24 00:10

>console.log()は使いました それも込みのコードを提示いただいた方がいいかもしれませんね。適切なデバッグになっているかどうかも見えますので。 解決されたようですが、やはりインデントは大事ですね。
guest

回答3

0

ベストアンサー

こんにちは。

以下の2点を修正してみるといかがでしょうか?

(1) let msgResult = ''; の一行上の } を削除する。

修正前:

javascript

1} 2 let msgResult = ''; 3 if (hum === com) {

修正後:

javascript

1 2 let msgResult = ''; 3 if (hum === com) {

(2) 末尾に } を追加

修正前:

javascript

1 msgResult = msgResult + 'コンピュータの出した手は「' + comHandName + '」でした'; 2 alert(msgResult);

修正後:

javascript

1 msgResult = msgResult + 'コンピュータの出した手は「' + comHandName + '」でした'; 2 alert(msgResult); 3}

以下、jsFiddle に上げました。

   

以上、参考になれば幸いです。

補足

ご質問に挙げられているコードの誤っている箇所の見つけ方の一例を挙げます。

  • Uncaught ReferenceError: com is not defined というエラーの内容から、「 {} の対応が間違っているかも」と推定する。(このように推定できることが、そもそも重要)

  • コードを https://beautifier.io/ にコピペして[Beautify Code]ボタンをクリックする。

  • ご質問にある、うまくいかない方のコードをコピペして[Beautify Code]をクリックすると、 let msgResult = ''; 以降、行頭のインデントがなくなります。

  • これで、どこで {} の対応がおかしくなったかが分かります。

ちなみに私は、開発ツールとして WebStorm を使っていますが、 WebStorm だと、新しい空のJSファイルを作り、これにご質問にある、うまくいかないほうのコードをコピペすると、コピペした時点でブロックレベルにあわせてインデントが整えられて、以下のようになるので、間違いが瞬時に分かります。

イメージ説明

投稿2019/06/23 22:05

編集2019/06/23 22:50
jun68ykt

総合スコア9058

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

スコープだと思います。
正解と比較したとき、}がそのifの直前に繰り上げられています。

投稿2019/06/23 22:02

papinianus

総合スコア12705

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

変数comがスコープ外なのが原因です。

ご参考

投稿2019/06/23 22:03

gentaro

総合スコア8949

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問