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("ここを通る");
}