読者です 読者をやめる 読者になる 読者になる

みかづきブログ その3

3ヶ月つづけてみました。

Switch文でfalsyな値をチェックしようとした際の注意

最近Switchでnullをチェックする機会があって、他のfalsyな値もチェックできるかを確かめたのですがNaNだけが失敗しました。

checkFalsyValue(false);
checkFalsyValue(null);
checkFalsyValue(({}).val);
checkFalsyValue("hoge" - 0); // MISS!!
checkFalsyValue("");

function checkFalsyValue(val) {
    switch(val) {
        case false:
            alert("FALSE!");
            break;
        case null:
            alert("NULL!");
            break;
        case undefined:
            alert("UNDEFINED!");
            break;
        case NaN:
            alert("NAN!");
            break;
        case "":
            alert("!");
            break;
        default:
            alert("MISS!!   " + val);
            break;
    }
}

よくよく考えると、

NaN === NaN; // => false

だからですね。
強引にSwitch文で判定したかったら、isNaNをつかって、

function checkNaN(val) {
    switch(isNaN(val)) {
        case true:
            alert("NAN!");
            break;
    }
}

的な感じで判定できないこともありません。