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