2018-04-10
条件判定文(if文)でエクスクラメーションマーク(!)を2つ使う理由とは
エクスクラメーションマークが並んでいる!!
先日、先輩の書いたJSのプログラムを眺めていて、ふと気になったことがありました。
条件判定の部分でびっくりマーク(!)が二つ並んでいたのでびっくりドンキーでした。普段から無駄にトリッキー、不毛な記述をすることがよくあるので、「また何かやっとるな」程度にしか思わなかったのですが、ちょっと気になったので調べてみました。
if (!!value) {
// 処理
}
結論から言うと、boolean型へ型変換を行っているようです。
エクスクラメーションマーク(!)ひとつで論理否定の意味。!!x
はx
の二重論理否定となります。
否定を否定するので元に戻ってしまい、それって意味がないのでは…と考えましたが、論理否定演算子にはboolean型に型変換するという作用があるため、評価値は必ずboolean型になります。
エクスクラメーションマークを並べる理由
定義されていない変数はundefined(未定義)が返るので、falseと判断されます。条件分岐でfalseと判断されるだけなので、何も問題はないように思います。
しかし、古いブラウザの中には、「undefined(未定義)」というキーワードを判断できないものがあるようです。
if文の中身はboolean型でなければいけません。
結果として、未定義の変数が条件判断の過程でbooleanに型変換されないため、if文がエラーになってしまう可能性があるからです。
まとめ
調べてみるとこういった記述をする方も少なからずいらっしゃるようです。これまで考えもしなかった記述でしたので驚きました。
初心者向けの参考書に載らないような記述は、よほど意味がない限りするべきではないと思います。個人のサイトであれば自由ですが、不特定多数の人間が関わるソースコードではなおさらではないでしょうか。