if文で複数条件の合致で全て実行


if文のelseと成立条件での注意に書きましたが、if文は最初の条件が成立したらそこで処理を実行して、以降の処理は実行しないで停止するのが基本です。ただし、これには例外もあります。

if文が処理を実行して停止するのは、if,else if,elseと続けていくif文の文法を忠実に実行するからです。それならば、この文法に忠実でないif文を作ればいいのです。

具体的には、else ifがあるから、そこで処理が実行して停止してしまうので、else ifをif文から外せばいいです。そして、ifのみでif文を作れば、if文での複数条件で複数に条件が成立した結果を何度も実行することができます。

let x = 200;として、変数のxに200の値を入れた以下のコードを見てみます。以下のコードでは、5番目だけ条件式を(x > 500)にしています。

let x = 200;

if(x > 10){
	console.log("1番目のxは" + "10より大きい。"); // 1番目のxは10より大きい。
} if(x > 20){
	console.log("2番目のxは" + "20より大きい。"); // 2番目のxは20より大きい。
} if(x > 30){
	console.log("3番目のxは" + "30より大きい。"); // 3番目のxは30より大きい。
} if(x > 40){
	console.log("4番目のxは" + "40より大きい。"); // 4番目のxは40より大きい。
} if(x > 500){
	console.log("5番目のxは" + "500より大きい。");
} if(x > 60){
	console.log("6番目のxは" + "60より大きい。"); // 6番目のxは60より大きい。
} if(x > 70){
	console.log("7番目のxは" + "70より大きい。"); // 7番目のxは70より大きい。
} if(x > 80){
	console.log("8番目のxは" + "80より大きい。"); // 8番目のxは80より大きい。
} if(x > 90){
	console.log("9番目のxは" + "90より大きい。"); // 9番目のxは90より大きい。
} if(x > 100){
	console.log("10番目のxは" + "100より大きい。"); // 10番目のxは100より大きい。
}

この結果を見ると、5番目だけがfalseなので、そこはスルーして、後の全てのtrueになって、条件式に合致した処理を実行しています。このif文では、falseがあってもそこでエラーになって止まらず、しかも、他の全ての合致条件の処理の実行ができているのです。

ただし、このif文の使いかたは、if文を紹介したJavaScriptの本では入門書どころか、中級者以上向けの専門書でも載っていないことです。ただし、これはエラーにならずに実行できているので、if文ではこういう使いかたもできることになります。

こんなif文の使いかたを実際のプログラムで使っていいものかと思うかもしれませんが、JavaScriptではもっと問題のある解釈がされていて、typeof nullがobjectになっていて、これは本来はnullになるべきものが、ECMAScriptでのバグがそのままになっているのが、実際のJavaScriptの中の仕様にもあります。

しかし、このバグがそのままになっているのは、typeof nullがobjectになる本来はバグの仕様がそのまま大量のプログラムで使用されてきているので、今さらこのバグを変えることができないからです。

if文は本来は複数の条件の中から成立して合致した中から最初の1つのブロックのみを実行するものですが、ifのみを使って書くと複数条件の成立で、複数の結果を出せる仕様になっているので、実際のプログラムでこの複数if文成立の条件文の使いどころがあれば、使ってみるといいかもしれません。