if文

JavaScriptは、型の指定がある意味で曖昧なので、比較する等価演算子にも特徴がありますので、注意が必要です。

基本的なものを掲載します。

  • 数値と文字列単純比較
var test = 100;
var test2 = "ABC";

if (test == 100 && test2 == "ABC") {
    alert("一致");
}

if (test != 101 || test2 != "ABD") {
    alert("不一致");
}

// 大なり小なり、複数条件(OR = || AND = &&)
if (test > 100
||  test < 100
&&  (test <= 100
&&  test >= 100))
{
}

上記については特筆するような事はないのですが、等価演算子の種類として、厳格な===と、==が存在し、これが以外とバグにつながったりしますので掲載します。

var test = 100;

if (test == 100) {
    alert("ここを通る");
}

if (test == "100") {
    alert("ここを通る");
}

if (test === "100") {
    alert("ここは通らない");
}

上記の2番目は、真となります。文字列の”100″なのに真となってしまうのは、等価演算子(==)の判定だからです。 JavaScriptでは、2 つのオペランド違う型の場合は、自動的にオペランドを変換して比較します。その為、真となります。便利といえば便利なのですが、意図しない判定となってしまう場合がありますので、厳密に数値として判定したいのであれば、厳密等価演算子(===)を使う方がよいと思います。

  • その他文字列比較(部分、正規表現)

文字列を比較するケースは多くあります。単純に比較するだけであれば、比較演算子(==,===,>,<,!=,!==)で問題ありませんが、部分一致や小文字大文字、正規表現による比較をよく使いますので、掲載します。

var strTest = "ABCDEFG";

// 部分一致(indexOf)
if (strTest.indexOf("BCD") != -1) {
    alert("ここを通る");
}
if (strTest.indexOf("ACD") != -1) {
    alert("ここを通らない");
}

// 小文字大文字一致(小文字:toLowerCase、大文字:toUpperCase)
if (strTest.toLowerCase() === "abcdefg") {
    alert("ここを通る");
}
if (strTest.toUpperCase() === "ABCDEFG") {
    alert("ここを通る");
}

// 正規表現判定

// 文字列完全一致
var reg = new RegExp(/^ABCDEFG$/, 'g');

if (reg.test(strTest)) {
    alert("ここを通る");
}

// 記号判定
strTest = "$";
var reg = new RegExp(/[!"#$%&'()\*\+\-\.,\/:;<=>?@\[\\\]^_`{|}~]/g);

if(reg.test(strTest)) {
    alert("ここを通る");
}

// matchで大文字小文字関係なく一致
// i:大文字小文字 g:全ての一致 m:改行時も一致
if (strTest.match(/^abcdefg$/igm)) {
    alert("ここを通る");
}