電子書籍の厳選無料作品が豊富!

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文に中括弧{}がついてなくても動きはしますが、つけないのがベターなのでしょうか?
(入門書籍なのでスタンダートを書いてるとは思うのですが……)

A 回答 (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行で済ませたい場合使います。
そう!私は短いコードが好きです。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

>というか(3)は不要。
わたしも、なんで二回書くのかは疑問でした。
教科書がベストとは限らないようで困ります(苦笑)

>document.form1.select1 は、教科書が古いかな?
2007年7月刊行の書籍ですが……あんまり過信しないようにします(^^;

「初期化」ということで、すんなり理解できました。
ちゃんとコンピュータがわかるように定義しないといけない、ということですね。

{}は、とりあえず最初のうちはつけ忘れをしないように、一行でもつけていこうと思っています。
HTMLなら打ち忘れでエラーが出ませんが……プログラミングはシビアですね、セミコロン一個を許さないようで(汗

お礼日時:2008/11/13 07:57

本題とは関係ないけど


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 で使う
    • good
    • 0

変数は、宣言した直後は中に何が入っているか不定です。


なので、確実に「空っぽ」の変数にするために「""」で初期化しています。

for文やif文に中括弧が付いていないのは、後に続く式が一つの時だけです。複数の式が付くときは{}をつけてブロックにしないといけません。
逆に言うと、一つしか式がなければどちらでも構いませんよ。
でも、人のコーディングしたソースを見ると判りますが、{}が付いていないif文やfor文はぱっと見判りづらいです…。(私だけ?)
    • good
    • 0
この回答へのお礼

他の方の意見と照らし合わせて、「初期化」ということで妙にしっくりきました。
個人的には、やはり仰るように{}があったほうがわかりやすいと思います。
テキストに愚痴ても仕方ありませんが、こう書けよと書いておいて、いきなり端折るのはどうかなぁとか思ったりしました(苦笑)

お礼日時:2008/11/13 07:45

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!