- ベストアンサー
初歩サンプル(値の型?)でつまづいてます。。
HTMLとスタイルシートしかわからず、初のプログラミング言語としてJavascriptを選びました。 とりあえず入門書籍のサンプルを見ながら勉強しているのですが、 さっそくfor文というか、値の型?で混乱してます。。 【Javascript部分】 function doClick(){ var str = ""; //←(1) var n = document.form1.select1.options.length; for(var i = 0;i < n;i++) if (document.form1.select1.options[i].selected) str += document.form1.select1.options[i].value + ","; //←(2) var str = "選択項目:" + str ; document.getElementById("showText").innerHTML = str; } 【HTML部分】 <p>※テスト用ページ</p> <div name="showText" id="showText">(※未設定)</div> <form name="form1"> <select name="select1" size="3" multiple> <option value="あいうえお">あいうえお</option> <option value="かきくけこ">かきくけこ</option> <option value="さしすせそ">さしすせそ</option> </select> <input type="button" value="送信" onClick="doClick();"> </form> options.lengthで配列の総数を数えて、真偽値を調べfor文で繰り返し、結果を反映させる部分はわかります。 わからない部分は、 (1)「var str = "";」の「""」は空の文字列を代入?ということでしょうか? 試しに消し見ると「undefined」が記述されるのですが…… 型を定義してないと起こる?問題のようで、型の宣言のようなものということでしょうか? (2)str += document.form1.select1.options[i].value + ","; for文中で、最初の一回目は「""+あいうえお+","」、二回目は「""+あいうえお+","+かきくけこ+","」……と繰り返されていくと思うのですが、(1)の意図がわからないので、「""」の空部分の意味が理解できません。 たぶんとるに足らない疑問のような気がするのですが…… ご教授いただけるとうれしいです。 ※蛇足なんですが、for文やif文に中括弧{}がついてなくても動きはしますが、つけないのがベターなのでしょうか? (入門書籍なのでスタンダートを書いてるとは思うのですが……)
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
さらに蛇足。 var a; a +=1; だとaが初期化されていないのでError! それこそundefnedなので、0なのかnullなのか?! 人間が勝手に0だと思っているだけ。文字列でも同じ 勝手に""だと思ってるだけ。 for if while などの後ろにつける {}ですが、自分の場合 forも含めて一行で用事を済ませられるなら{}は省略しています 可読性は悪化しますが、 a=b=c=d=e=1; if( a=b ) e=(b=2,c=3,d=4,5);//a==bではない。1行で複数動作 alert([a,b,c,d,e]); if( 式 )の式の部分が 0 or "" 以外なら実行されるので a=b は代入式ですが1を返すので実行されます (式1,式2,式n,…)は一番最後の数値を返すとか。 まぁ~こんなの使う人は多くありませんが 1行で済ませたい場合使います。 そう!私は短いコードが好きです。
その他の回答 (2)
本題とは関係ないけど function doClick(){ var str = ""; //←(1) var n = document.form1.select1.options.length; for(var i = 0;i < n;i++) if (document.form1.select1.options[i].selected) str += document.form1.select1.options[i].value + ","; //←(2) var str = "選択項目:" + str ;←(3) document.getElementById("showText").innerHTML = str; } どうせ(3)で"選択項目:"を最初にするので(1)の段階でそれを代入。 (3)でもう一度var str = とするのも変。 というか(3)は不要。 document.form1.select1 は、教科書が古いかな? selectにidを振り、document.getElementById で使う
変数は、宣言した直後は中に何が入っているか不定です。 なので、確実に「空っぽ」の変数にするために「""」で初期化しています。 for文やif文に中括弧が付いていないのは、後に続く式が一つの時だけです。複数の式が付くときは{}をつけてブロックにしないといけません。 逆に言うと、一つしか式がなければどちらでも構いませんよ。 でも、人のコーディングしたソースを見ると判りますが、{}が付いていないif文やfor文はぱっと見判りづらいです…。(私だけ?)
お礼
他の方の意見と照らし合わせて、「初期化」ということで妙にしっくりきました。 個人的には、やはり仰るように{}があったほうがわかりやすいと思います。 テキストに愚痴ても仕方ありませんが、こう書けよと書いておいて、いきなり端折るのはどうかなぁとか思ったりしました(苦笑)
お礼
回答ありがとうございます。 >というか(3)は不要。 わたしも、なんで二回書くのかは疑問でした。 教科書がベストとは限らないようで困ります(苦笑) >document.form1.select1 は、教科書が古いかな? 2007年7月刊行の書籍ですが……あんまり過信しないようにします(^^; 「初期化」ということで、すんなり理解できました。 ちゃんとコンピュータがわかるように定義しないといけない、ということですね。 {}は、とりあえず最初のうちはつけ忘れをしないように、一行でもつけていこうと思っています。 HTMLなら打ち忘れでエラーが出ませんが……プログラミングはシビアですね、セミコロン一個を許さないようで(汗