「JavaScript/制御構造」の版間の差分

削除された内容 追加された内容
Ef3 (トーク | 投稿記録)
{{Nav}}
タグ: 2017年版ソースエディター
Ef3 (トーク | 投稿記録)
編集の要約なし
タグ: 2017年版ソースエディター
9 行
と表示します。
 
:<syntaxhighlight lang="javascript">
let n = 0;
 
32 行
次のプログラムは、''n'' < 0(''n''が0より小さい)という条件が真であるときのみ「負の数」と表示します。
 
:<syntaxhighlight lang="javascript">
let n = -1;
 
43 行
次のプログラムは、''n'' < 0(''n''が0より小さい)という条件が真であれば「負の数」、さもなくば(''n''が0以上あるいはNaN(略 ならば)「自然数」と表示します<ref>計算機科学では一般に0を自然数に含め、曖昧さを避けたいときは非負整数とも言います</ref>。
 
:<syntaxhighlight lang="javascript">
let n = 0;
 
57 行
if/else文は次のように何個もつらねることができます。
 
:<syntaxhighlight lang="javascript">
let n = 0;
 
77 行
単文(1つの文)しか入っていない場合は、次のように書いても同じことです。
 
:<syntaxhighlight lang="javascript">
let n = 0;
 
90 行
なお、この場合は条件演算子を用いて簡潔に書けます。
 
:<syntaxhighlight lang="javascript">
let n = 0;
 
100 行
if文の条件式はすべてtrueかfalseの[[JavaScript/Boolean|真偽値]]として評価されます。たとえば、数値の0は真偽値に変換するとfalseになるので<ref>falsy</ref>、次のif文のブロックは絶対に実行されません([[w:到達不能コード|デッドコード]])。
 
:<syntaxhighlight lang="javascript">
if (0) {
// たどりつけない
109 行
<syntaxhighlight lang="c">if (n == 0) { /* ... */ } </syntaxhighlight>
のほかに
:<syntaxhighlight lang="c">if (!n) { /* ... */ }</syntaxhighlight>
と書けます、同様に ''n''が0に等しくないかどうかは
:<syntaxhighlight lang="c">if (n != 0) { /* ... */ }</syntaxhighlight>
のほかに <syntaxhighlight lang="c">if (n) { /* ... */ }</syntaxhighlight>
とも書けます。
125 行
if/else文を用いる場合は、
 
:<syntaxhighlight lang="javascript">
if (n % 2 == 0) {
console.log("偶数");
136 行
または
 
:<syntaxhighlight lang="javascript">
if (n % 2) {
console.log("奇数");
147 行
条件演算子を用いる場合は、
 
:<syntaxhighlight lang="javascript">
console.log(n % 2 == 0 ? "偶数"
: "奇数");
154 行
または
 
:<syntaxhighlight lang="javascript">
console.log(n % 2 ? "奇数"
: "偶数");
161 行
または
 
:<syntaxhighlight lang="javascript">
console.log((n % 2 ? "奇"
: "偶") + "数");
167 行
または
 
:<syntaxhighlight lang="javascript">
console.log("偶奇"[n % 2] + "数");
</syntaxhighlight>
173 行
 
=== if-else 文の構文===
:<syntaxhighlight lang="javascript">
if (条件式)
文1
184 行
'''[[w:switch文|switch文]]'''(スイッチぶん、''switch statement'')は、if/else文を何個もつらねて書くことが冗長な場合に用いられます。
 
:<syntaxhighlight lang="javascript">
if (keyCode == 37) {
console.log("←");
203 行
 
これはswitch文を使って次のように書くことができます。
:<syntaxhighlight lang="javascript">
switch (keyCode) {
case 37:
225 行
switch文はここぞというときに使ってください<ref>JavaScriptのswitch文は、動的なのに静的なC言語の構文を倣ったので'''[[#switch文の限界と限界突破|コラム:switch文の限界と限界突破]]'''の様なハックを使わない限り恩恵を受けられません。</ref>。
 
:<syntaxhighlight lang="javascript">
console.log({ 37: "←", 38: "↑", 39: "→", 40: "↓" }[keyCode] || "?");
</syntaxhighlight>
 
=== switch 文の構文===
:<syntaxhighlight lang="javascript">
switch (式) {
case 値1 :
250 行
この為、式に対応する範囲や正規表現を直接的に表現することはできません。
この制限はややトリッキーな方法で回避できます。
:<syntaxhighlight lang="javascript" highlight=3 line>
let age = prompt("年齢は?"),
text = "";
263 行
</syntaxhighlight>
ポイントは
:<syntaxhighlight lang="javascript" start=3 highlight=1 line>
switch (true) {
</syntaxhighlight>
274 行
いよいよループの登場です。'''[[w:while文|while文]]'''(ホワイルぶん、''while statement'')は条件が真である間、文を実行しつづけます。
 
:<syntaxhighlight lang="javascript">
let i = 0;
while (i < 10) {
293 行
 
=== while 文の構文 ===
:<syntaxhighlight lang="javascript">
while (式)
302 行
'''[[w:do-while文|do-while文]]'''(ドゥ・ホワイル文、''do-while statement'')は、まずdo文のブロックを実行し、次にwhile文の条件式を確認してループします。次のプログラムは0から9までの数字を表示します。
 
:<syntaxhighlight lang="javascript">
let i = 0;
do {
311 行
 
=== do-while 文の構文 ===
:<syntaxhighlight lang="javascript">
do
324 行
次のプログラムは0から9までの数字を表示します。
 
:<syntaxhighlight lang="javascript">
for (let i = 0; i < 10; i++) {
console.log(i);
336 行
結果、''i'' < 10がtruthyである間、ブロックの実行と変数の更新が行われます。
 
:<syntaxhighlight lang="javascript">
const array = [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 ];
for (let i = 0, len = array.length; i < len; i++) {
345 行
ブロック文は文の特殊なケースで単文でももちろん有効です<ref>文 ⊇ ブロック文</ref>。
 
:<syntaxhighlight lang="javascript">
const array = [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 ];
for (let i = 0, len = array.length; i < len; i++)
353 行
後置インクリメント演算子は変数の値を1増やし、増やす前の値を返すので、次のように書けます。
 
:<syntaxhighlight lang="javascript">
const array = [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 ];
for (let i = 0, len = array.length: i < len; console.log(array[i++]))
360 行
 
このような書き方を好み人もいますが、文意を汲むなら...
:<syntaxhighlight lang="javascript">
[ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 ].forEach(x => console.log(x));
</syntaxhighlight>
366 行
 
=== for 文の構文 ===
:<syntaxhighlight lang="javascript">
for ( 式1; 式2; 式3)
378 行
== for-in ==
for-in 文は、オブジェクトのプロパティのうちキーが文字列で列挙可能なもの全てに反復処理を行います。
:<syntaxhighlight lang="javascript">
const obj = { x: 2, y: 3, z: 5 };
 
447 行
== for await-of ==
for await-of 文は、非同期関数用の for-of です。
:<syntaxhighlight lang="javascript">
async function* asyncShift() {
for (let i = 1, len = 2 ** 16; i < len; yield i <<= 3)
471 行
JavaScript 1.6で追加されたfor each-in文はオブジェクトの値を順番に取り出して反復処理します。
 
:<SyntaxHighlightsyntaxhighlight lang="JavaScript">
var sales = <sales vendor="John">
<item type="peas" price="4" quantity="6"/>
491 行
次のプログラムは''i''が5になった時点でfor文のループを抜けるので、0から4までの数字を表示します。
 
:<syntaxhighlight lang="javascript">
for (let i = 0; i < 10; i++) {
if (i == 5)
503 行
次のプログラムは0から9までの数字のうち3の倍数だけ表示します。
 
:<syntaxhighlight lang="javascript">
for (let i = 0; i < 10; i++) {
if (i % 3)