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

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

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

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

Q&A

解決済

3回答

3107閲覧

undefinedを非表示にしたい

yuki_yama

総合スコア1

JavaScript

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

0グッド

0クリップ

投稿2021/07/22 04:40

編集2021/07/22 05:30

前提・実現したいこと

オノマトペを連続して出し、音ごとに区切りたいのですが、実行した際に「underfined」が文字と記号の間に入ってきてしまいました。
「underfined」を非表示にする方法を教えていただけませんか?

発生している問題・エラーメッセージ

ゴロundefined:ポタundefined:ゴロゴロゴロundefined:コンundefined:コンコンundefined:

該当のソースコード

ここに言語を入力 <body> <script> //オノマトペ var array = new Array(6); array[0] = "ポツ"; array[1] = "ザーッ"; array[2] = "ボタ"; array[3] = "ポタ"; array[4] = "ゴロ"; array[5] = "コン"; //ランダム回数同じ音を発生させる function rnzk() { var rnzk = (array[Math.floor(Math.random() * array.length)]); var k = Math.floor(Math.random() * 5) + 1;//1~5をランダムでだす for (var i = k; i <= 5; i++) { // 1~5個同じ音が発生する document.write(rnzk); } } for (var i = 0; i < 5; i++) { // 上記を5回繰り返す document.write(rnzk() + ":"); } </script> </body>

試したこと

「undefined」が出る理由を調べ、「return」を試してみたのですがうまくいきませんでした。代入はどこになにを入れればいいのかがわからず、試せていません。

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

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

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

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

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

y_waiwai

2021/07/22 04:45

このままではコードが読めないので、質問を編集し、<code>ボタンを押し、出てくる’’’の枠の中にコードを貼り付けてください
BeatStar

2021/07/22 05:16

そもそも基礎自体ができていないし、 デバッグすらしていない。
guest

回答3

0

ベストアンサー

質問者さんには実力的にまだ理解できないと思われますが、この記事を見ている他の人の為に解説します。

原因

undefined が出力されているのは、関数 rnzk の「戻り値」がwriteされているから。

javascriptの関数は必ず戻り値があります。
returnを明示的に記載しない場合 undefinedが戻り値として返ります。
return undefined;が省略されているというか、勝手に付け加えられると考えてもらえると良いかと思います。

例えばこんなコードを実行してみてください。

javascript

1function foo(){ 2 console.log("foo"); 3} 4 5console.log(foo());

関数fooが実行されると、関数内でconsole.logが実行され、コンソールにはfooは出力されます。
console.log("foo")の結果です。
その次の行に、undefinedが出力されます。このundefinedは関数fooの戻り値です。
console.log(foo())の結果です。

質問のコードも、console.logdocument.writeに変わっただけで、同じ現象が起こっています。

対処

要するにrnzk関数の結果そのものをwriteしなければいいので、document.writeからrnzkと":"を出力する処理を分離させればよいです。

javascript

1 for (var i = 0; i < 5; i++) { 2 // 上記を5回繰り返す 3 rnzk(); 4 document.write(":"); 5 }

投稿2021/07/22 07:34

hope_mucci

総合スコア4447

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

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

yuki_yama

2021/07/22 09:47

ご丁寧にありがとうございます。理解できるように勉強頑張りたいと思います。
guest

0

rnzkでdocument.writeをやっているので、下記のforでは不要だと思います

for (var i = 0; i < 5; i++) { // 上記を5回繰り返す // document.write(rnzk() + ":"); rnzk() + ":"; }

投稿2021/07/22 04:48

gamugamu

総合スコア10

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

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

0

まず、コードを読みましょう

コードを読むコツは『一行レベルで、行がなにをしているか考えながら読む』です。

例えば、コメントにするとかです。

// 配列を用意 var array = new Array(6); array[0] = "ポツ"; array[1] = "ザーッ"; array[2] = "ボタ"; array[3] = "ポタ"; array[4] = "ゴロ"; array[5] = "コン"; // rnzk関数を定義 function rnzk() {        // 配列rnzkを用意 var rnzk = (array[Math.floor(Math.random() * array.length)]);        // 変数kに1〜5の乱数を設定 var k = Math.floor(Math.random() * 5) + 1; // kから5まで繰り返す for (var i = k; i <= 5; i++) { // rnzkの値を出力 document.write(rnzk); } }      // 5回繰り返す for (var i = 0; i < 5; i++) { // rnzk関数を呼び出して戻り値を表示 document.write(rnzk() + ":"); }

ですね。(質問文がアレなのであえて)

コメントにしてあるやつをシミュレーションしてみてください。

そうすると、rnzk配列の方は初期化も代入もされていません。

元のコードでは(関数内の)二番目のfor文では
『上記を5回繰り返す』と書かれています。

なんか、勘違いしていそうな匂いです。

さらに、私が素直に読んだコードでは
『kから5まで繰り返す』となっています。

これは合っていますかね?

数直線を書いて考えるとわかりますよ。

そもそもkとはなんでしょうか。

素直に読むと『1〜5の乱数』のはずです。

ということは、k=1もあり得るし、
k=5の場合もあり得る。

例えば乱数が5、つまりk=5の場合、
数直線で考えると、
『一回だけしか処理しない』です。

おそらく、本来の意図とは違うはずです。

つまり『基礎ができていないことが原因』です。

プログラミングは『書いて終わり』ではありません。

私の過去回答を参考にして下さい。
やる気があるのなら必ず読みましょう。

投稿2021/07/22 05:14

編集2021/07/22 09:01
BeatStar

総合スコア4958

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

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

hope_mucci

2021/07/22 07:47 編集

確かに1行1行理解しながらコードを書くことが大切なのは同意します。 (このコードも多分何らかの他のコードをコピペしながら書いたと思われる節がありますし) しかし、質問の現象の解決方法としての要点はそこではないはずです。
hope_mucci

2021/07/22 08:04

加えて、コードを書くならコードブロックを使用してください。
BeatStar

2021/07/22 08:40

コードの件は『あえて』です。 (最初の質問ではコードブロックを使っていなかったので、面倒だったので。かといってサンプルを載せないと意味不明だし…)
yuki_yama

2021/07/22 09:50

回答ありがとうございます。基礎ができるように頑張りたいと思います。
hope_mucci

2021/07/22 09:58

ベテラン回答者が見本を見せなくてどうするんですか?体裁を整えて欲しかったら修正依頼で対応するべきではないでしょうか。
BeatStar

2021/07/22 10:03

hope_mucciさん ですね…気をつけます…
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問