質問: わからない点↓ 誕生石と星座のundefinedと出ているところはどう書けば正しい表示になるか。 最後のコンソールログで星を出し、さらに運勢ごとに言葉を付け加える、その方法を教えて下さい。 占い 実行結果 HTML1300: ナビゲーションが発生しました。 2019年生まれの浦島ですさんの干支は亥です。 6生まれの浦島ですさんの誕生石はundefinedです。 6月26日生まれの浦島ですさんの星座はundefinedです。 undefined★★undefined となっている状態です。 実行結果を以下の通りにしたいです。 例、 1963年生まれの浦島さんの干支は卯です。 5月生まれの浦島さんの誕生石はエメラルドです。 5月1日生まれの浦島さんの星座は牡牛座です。 ★★★頑張れば、何かいいことあるかもよ としたいです。 わからない点↓ 誕生石と星座のundefinedと出ているところはどう書けば正しい表示になるか。 最後のコンソールログで星を出し、さらに運勢ごとに言葉を付け加える、その方法を教えて下さい。 運勢表 1 ★ 今日はおとなしく過ごしましょう 2 ★★ 明日はいいことありますよ、きっと 3 ★★★ 頑張れば、なにかいいことあるかもよ 4 ★★★★ 今日はいいことあるかもね 5 ★★★★★ 今日もいいことあるはずです!
回答: 他の人のコメント欄でやりとりしてもいけないので新しく回答として。 まず、前提として`prompt`で入って来るものは**文字列**になります。 そのため`case`で数値と比較しても比較できませんでしたね。 `function constellation()`でも同じ事が言えます。 例えば 一番最初の`if((bm===3&&bd>=21)` この比較ですが、オペランドの型は`bm`は**文字列**、3は**数値**です。 そこで型を揃えるためにどっちを揃えてもいいのですが 文字列として比較する場合は`case文`のように値をシングルクォートで囲みます `if((bm==='3'&&bd>='21')` こうすることで文字列の比較となるのでうまく式が評価されるはずです。 逆に数値として比較したい場合は ``` name=prompt("お名前は?",""); by=prompt("生まれた西暦年を半角4桁で入力してください",""); bm=prompt("生まれた月を半角(1~12)で入力してください",""); bd=prompt("生まれた日を半角(1~31)で入力してください",""); /* 文字列を数値へパースする */ by=parseInt(by); bm=parseInt(bm); bd=parseInt(bd); ``` 上記3行を追加してあげてください。(これがコメントで書いたパースです) パースする場合は`case`も`function constellation`もシングルクォートで囲む必要はありません。 ランダムで運勢を出すについては 配列に運勢のメッセージを入れてしまい、その中からランダムで選択する方が簡単かと思われます。 ``` function fortune(){ var fortuneArr = ["★ 今日はおとなしく過ごしましょう", "★★ 明日はいいことありますよ、きっと", "★★★ 頑張れば、なにかいいことあるかもよ", "★★★★ 今日はいいことあるかもね", "★★★★★ 今日もいいことあるはずです!",]; // 配列からランダムで値を選択 var fortune = fortuneArr[Math.floor(Math.random() * fortuneArr.length)]; return fortune; ``` こんな感じでしょうか