• ベストアンサー

for文について

以下のfor文について質問致します。 <script type="text/javascript"> for(i = 10; i; i--){ document.write(i+"<br>"); } </script> 条件式の部分がi>0ならわかるのですが、ただiと書いただけで 10回繰り返しが起こるのはどうしてでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • steel_gray
  • ベストアンサー率66% (1052/1578)
回答No.2

条件式(≒boolean型)を書くべき場所では、そこに書かれているものをboolean型(true/false)に型変換します。 例の i であれば数値型ですので +0, -0, NaN ならば結果は false; そうでなければ true となります。 要は値が10~1の間はtrueで実行され、、0 になった時に false となりループが終了するわけです。 詳しくは参考URLを見てもらうとして、空文字列:'' や、Object:null も同様にfalseとして扱われます。 http://www2u.biglobe.ne.jp/~oz-07ams/prog/ecma262r3/9_Type_Conversion.html#section-9.2

shoshosho
質問者

お礼

詳しいご説明ありがとうございます^^ おかげさまでよく理解できました。 参考URLも参考になりました。

その他の回答 (2)

  • Redpython
  • ベストアンサー率56% (9/16)
回答No.3

こんにちは。 var i = 0; if (i) {   alert("OK"); } else {   alert("NG"); } どっちが出ると思いますか? それと同じ事です。

shoshosho
質問者

お礼

こんにちは^^ご回答ありがとうございます。 この場合はNGがでるみたいですね。 0のときはfalseになるということをすっかり忘れていました^^;

  • k-pix
  • ベストアンサー率51% (50/98)
回答No.1

(数値) != 0 の時、その論理値は true (数値) == 0 の時、その論理値は false として扱われます。 i という条件式は、i != 0 と等価です。

shoshosho
質問者

お礼

ご回答ありがとうございました^^ なるほど0のときはfalseになるんですね。

関連するQ&A

  • for文のiを使ってリンク先のアドレスを指定したい

    <html> <head> <title></title> </head> <body> <script type="text/javascript"> <!-- document.write("<font size ='7'>一覧</font><br>"); for(i = 1; i<6; i++){ document.write('<a href="jwork01.html">課題1</a><br>'); } //--> </script> </body> </html> >document.write('<a href="test01.html">テスト1</a><br>'); test01~05.htmlのリンクと、文字列テスト1~テスト2までをfor文のiを使って テスト1 テスト2 テスト3 テスト4 テスト5 というように、繰り返し表示たいのですがどうやっても正常に反映されません。単純でカンタンなことだとは思うのですが、、教えて頂けませんでしょうか。 お願いします。

  • forループが回らない

    以下のコードで何故for文が回らないのか教えてください。 ど素人の質問で申し訳ありません。 一応、本に書いてある通りにコーディングしたつもりなのですが・・・ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html lang="ja"> <head> <meta http-equiv="Content-Type" content="text/html; charset=shift_jis">  <title>なんでforループが回らないの?</title> </head> <body> <script type="text/javascript"> list_term=new Array("HOME", "FAQ", "ご利用規約", "プライバシーポリシー", "サイトマップ", "お問い合わせ"); document.write(list_term[0]+'<br>') document.write(list_term[1]+'<br>') document.write(list_term[2]+'<br>') document.write(list_term[3]+'<br>') document.write(list_term[4]+'<br>') document.write(list_term[5]+'<br>') document.write('<br>')  for(i=0; i==6; i++) document.write(list_term[i]+'<br>') </script> </body> </html>

  • for文の変化式について

    javascriptを勉強中の初心者です。 以下のスクリプトを見てください。 var num = 1; document.write("<p>"); for (var i = 0; i < 10; i++){ num *= 2; document.write("i = " + i + ",num = " + num + "<br />"); if (num >= 100){ break; } } document.write("<br />"); このスクリプトの実行結果は i=0 , num=2 i=1 , num=4 i=2 , num=8 i=3 , num=16 i=4 , num=32 i=5 , num=64 i=6 , num=128 なのですが、なぜ一行目の i の値が 0 なのでしょうか。 forの中の変化式(i++)で、初期化後の値 0 から 1 増えるので、1 だと思うのですが・・・ 1回目の処理では変化しない、等とは 参考書に書いてなかったので不思議に思いました。 ご存知の方、どうか理由を教えてください。 よろしくお願いいたします。

  • 入れ子になったfor文の初期化式について

    javascriptを勉強中の初心者です。 以下のスクリプトを見てください。 document.write("<p>"); outloop: for (var i = 1; i < 5; i++){ for (var j = 1; j < 5; j++){ document.write(i + " × " + j + " = " + (i * j) + "<br />"); if (i * j > 10){ break outloop; } } } document.write("</p>"); 5未満の数同士の乗算の結果を順に表示し 乗算の結果が10を超えたら外のループを抜けるというスクリプトです。 for文がこのように入れ子になっている場合、 内側のループが二週になるとjはまた初期化されて1になるのでしょうか? 手持ちの参考書にあるfor文の説明では『初期化式は初めの一回だけ実行される』とあります。 内側のループが二回目以降の時、参考書のいう『初めの一回』になると考えていいのでしょうか。 初歩的な質問で恐縮ですが、ご存知の方どうか教えてください。 よろしくお願いいたします。

  • for文の使い方について

    こんばんはpiyottiと申します。 forループを使用してtextの値を取得したいと思っています。 「document.myFORM.namei・・・」の「i」をループカウンターとして 「name1、name2・・・」と増やしていきたいのですがうまくいきません。 どうかよろしくお願いいたします。 <script Language="JavaScript"><!-- function calc(form) { n = 0; for (i=0; i<4; i= i+;) n += eval(document.myFORM.namei.value); } // --></script> <form name="myFORM"> 数値1:<input type="text" onChange="calc(this.form, this)" name="name1"> 数値2:<input type="text" onChange="calc(this.form, this) name="name2"> 数値3:<input type="text" onChange="calc(this.form, this) name="name3"> 数値4:<input type="text" onChange="calc(this.form, this) name="name4"><br> </form>

  • for文の記述方法について

    外部javascriptファイルに以下のような記述をしているのですが、 この内容をfor文を使用して一行にまとめる記述方法を教えていただけないでしょうか。 初歩的な質問で本当に申し訳ございません。 document.write("<style type='text/css'>#thephoto1 {visibility:hidden;}</style>"); document.write("<style type='text/css'>#thephoto2 {visibility:hidden;}</style>"); document.write("<style type='text/css'>#thephoto3 {visibility:hidden;}</style>"); document.write("<style type='text/css'>#thephoto4 {visibility:hidden;}</style>"); document.write("<style type='text/css'>#thephoto5 {visibility:hidden;}</style>"); 何卒、宜しくお願い致します。

  • while(i<100){

    繰り返し文字を書き込むサンプルコードを拾ったのですが、 意味がわからない部分があるので教えてください。 --------------------------------------------------------- <html> <body> <script type="text/javascript"> var i=0; while(i<100){ if(i==5){ break; } document.write("繰り返し"+(i+1)+"回目<br>"); i=i+1; } </script> </body> </html> ---------------------------------------------------------. while(i<100){ の部分がよくわからないのですが、 なぜ100が出てくるのでしょうか? 「5回繰り返して文字を書き込む」というプログラムになぜ「100」が使われるのか教えてください。 ご回答よろしくお願いします。

  • selectタグで日付を生成

    プルダウンメニューで、本日から4日後 から 1か月先までの日付をYYYY/MM/DDの形式で生成して表示されたいのですが、それをvalueに入れる方法が分かりません。 下記までは書いてみたんですが、 <option value="???">のところに何と書いていいのか分からなくなってしまいました。。 for文などループ処理で書いた方がキレイだとは思いますが、 イマイチ分からなかったので、併せて御教授いただければと思います。 <script type="text/javascript"> document.write(AddDate(+4)+'~'+ AddDate(+30)); function AddDate( n ){ var day = new Date( (new Date).getTime()+n*24*60*60*1000); return (day.getFullYear() + "/" + (day.getMonth() + 1) + "/" + day.getDate()); } </script> <select name="delidate"> <option value=""><script type="text/javascript">document.write(AddDate(+4));</script></option> <option><script type="text/javascript">document.write(AddDate(+5));</script></option> <option><script type="text/javascript">document.write(AddDate(+6));</script></option> <option><script type="text/javascript">document.write(AddDate(+7));</script></option> <option><script type="text/javascript">document.write(AddDate(+8));</script></option> <option><script type="text/javascript">document.write(AddDate(+9));</script></option> <option><script type="text/javascript">document.write(AddDate(+10));</script></option> <option><script type="text/javascript">document.write(AddDate(+11));</script></option> <option><script type="text/javascript">document.write(AddDate(+12));</script></option> <option><script type="text/javascript">document.write(AddDate(+13));</script></option> <option><script type="text/javascript">document.write(AddDate(+14));</script></option> <option><script type="text/javascript">document.write(AddDate(+15));</script></option> <option><script type="text/javascript">document.write(AddDate(+16));</script></option> <option><script type="text/javascript">document.write(AddDate(+17));</script></option> <option><script type="text/javascript">document.write(AddDate(+18));</script></option> <option><script type="text/javascript">document.write(AddDate(+19));</script></option> <option><script type="text/javascript">document.write(AddDate(+20));</script></option> <option><script type="text/javascript">document.write(AddDate(+21));</script></option> <option><script type="text/javascript">document.write(AddDate(+22));</script></option> <option><script type="text/javascript">document.write(AddDate(+23));</script></option> <option><script type="text/javascript">document.write(AddDate(+24));</script></option> <option><script type="text/javascript">document.write(AddDate(+25));</script></option> <option><script type="text/javascript">document.write(AddDate(+26));</script></option> <option><script type="text/javascript">document.write(AddDate(+27));</script></option> <option><script type="text/javascript">document.write(AddDate(+28));</script></option> <option><script type="text/javascript">document.write(AddDate(+29));</script></option> <option><script type="text/javascript">document.write(AddDate(+30));</script></option> </select> 分かり難く申し訳ないですが、宜しくお願い致します。

  • java scriptで読み込むtxtでリンクする

    java scriptを使って外部テキストデータをhtml内に表示させることはできたのですが、そのテキストからさらに別ページへのリンクを貼る方法はあるでしょうか? ■java script内 var data = [ [2010.12.12,ここにコメント], [2010.11.11,'ここにコメント'], [2010.10.10,'ここにコメント'] ]; ※ここにコメントの全文または一部分をリンクさせたいです。 ■html内 <script type="text/javascript" src="data.js"></script> <script type="text/javascript"> for(var i=0;i<data.length;i++) document.write(data[i][0]+'&nbsp; &nbsp;'+data[i][1]+'<br>'); </script> よろしくお願いします。

  • JavaScript for文の処理

    JavaScriptでクイズの採点をしたいと思っています。 ↓のスクリプトを書いたのですが 「ページでエラーが発生しました」 という表示がステータスバーにでます。 二問とも一番下の選択肢を選んだ場合 「2点です」とアラートに表示させたいのですがどうしても、うまくいきません。 おそらくfor文内の score + document.myFORM.elements[i].value; このへんがおかしいのだと思うのですが。 どなたか修正方法をお願いします。 <HTML> <HEAD> <script Language="JavaScript"><!-- function GetScore(){ score = 0; for (i=0; i<6; i++) if (document.myFORM.elements[i].checked) score + document.myFORM.elements[i].value; alert(score+"点です"); // --></script> </HEAD> <BODY> <FORM name="myFORM">第一問:あなたは? <BR> <INPUT TYPE="RADIO" NAME="q1" ID="r1"VALUE="0"> <LABEL FOR="r1">引きこもり</LABEL> <BR> <INPUT TYPE="RADIO" NAME="q1" ID="r2" VALUE="1"><LABEL FOR="r2">立てこもり</LABEL> <BR> <INPUT TYPE="RADIO" NAME="q1" ID="r3" VALUE="1"><LABEL FOR="r3">生き残り</LABEL> <BR><BR> 第二問:あなたは? <BR> <INPUT TYPE="RADIO" NAME="q2" ID="r2_1" VALUE="0"><LABEL FOR="r2_1">引きこもり</LABEL> <BR> <INPUT TYPE="RADIO" NAME="q2" ID="r2_2" VALUE="0"><LABEL FOR="r2_2">立てこもり</LABEL> <BR> <INPUT TYPE="RADIO" NAME="q2" ID="r2_3" VALUE="1"><LABEL FOR="r2_3">オタク</LABEL> <BR><BR> <input type="button" value="採点する" onClick="GetScore()"> </FORM> </BODY></HTML>

専門家に質問してみよう