眠れない夜は羊を数えてみましょう。
<p id="out1"></p> <script> let s1 = ""; for (let i = 1; i <= 100; i++) { s1 += "羊が" + i + "匹,"; } s1 += "ぐぅ"; document.getElementById("out1").textContent = s1; </script>
textContent
ではプレインテキストしか出力できません。HTMLを出力するには innerHTML
を使います。
<p id="out2"></p> <script> let s2 = ""; for (let i = 1; i <= 10; i++) { s2 += "羊が" + i + "匹<br>"; } s2 += "疲れた"; document.getElementById("out2").innerHTML = s2; </script>
昔は次のように document.write()
を使っていましたが,今は非推奨です。
<p> <script> for (let i = 1; i <= 100; i++) { document.write("羊が" + i + "匹,"); } document.write("ぐぅ"); </script> </p>
<script>
の代わりに
<script type="text/javascript">
と書いてもかまいません。今のHTMLでは type="text/javascript"
は省略できます。なお,昔は
<script language="javascript">
と書きました。
JavaScriptの機能を切っているブラウザのためのメッセージを noscript
というタグで表示することができます。
<p id="out1"></p> <script> let s1 = ""; for (let i = 1; i <= 100; i++) { s1 += "羊が" + i + "匹,"; } s1 += "ぐぅ"; document.getElementById("out1").textContent = s1; </script> <noscript> <p>あなたのブラウザはJavaScriptをサポートしていません。</p> </noscript>
昔は変数を宣言するのに var
を使いましたが,今は let
を使う書き方が推奨されています。両者は「スコープ」(変数の存在範囲)が違います。var
で宣言した変数は全体(関数の中なら関数全体)がスコープになりますが,let
ではブロック({ ... }
で囲まれた範囲)がスコープになります(ブロックがなければ let
以降全体)。let
では,例えば
let s1 = ""; s1 += "羊が" + i + "匹,"; // エラー! for (let i = 1; i <= 10; i++) { s1 += "羊が" + i + "匹,"; } s1 += "羊が" + i + "匹,"; // エラー! document.getElementById("out1").textContent = s1;
は2箇所でエラーになりますが,var
では
let s1 = ""; s1 += "羊が" + i + "匹,"; // 「羊がundefined匹」と表示される for (var i = 1; i <= 10; i++) { s1 += "羊が" + i + "匹,"; } s1 += "羊が" + i + "匹,"; // 「羊が11匹」と表示される document.getElementById("out1").textContent = s1;
のように,for
ループの前後でも i
が使えてしまいます(ただし最初は何も入っていないので undefined となる)。
let
に似たブロックスコープのもので const
というものもあります。こちらはconstant(定数)を宣言するのに使います。値を変えようとするとエラーになります。
ただ,過去のしがらみで,var
も let
も const
も使わないで変数を使ってしまうこともできてしまいます。これを避けるためには,コードの先頭に "use strict";
と書いておきます。こうすることによって「strict モード」になり,エラーチェックを厳密にしてくれます。
"use strict"; s1 = ""; // エラー!
最後に,JavaScript の行末(または }
の直前または入力の終わり)のセミコロン ;
はだいたい省略可能です。特に HTML の onclick="..."
などの中に書く JavaScript コードの最後にはセミコロンを付けないことが多いと思います。JavaScript は改行がスペースと同じ意味ではないので,変なところで改行するとエラーになることがあります。次の例はセミコロンも let
の類も全部省略したものです:
<blockquote> <p id="out3"></p> </blockquote> <script> s3 = "" for (j = 1; j <= 100; j++) { s3 += "羊が" + j + "匹," } s3 += "ぐぅ" document.getElementById("out3").textContent = s3 </script>