JavaScript での二重否定

自社コンポーネントとかのソース解析してて「ん?」と思ったから少し調べてみた。

var hoge = {};
var b = !!hoge;

二重否定(!!)を行うことで値の真偽値として取得することができる。Boolean型へ変換するイディオム。

一見なにかと思うけど分解すればその挙動は分かりやすい。

alert(hoge); // object これはそのまま
alert(!hoge); // false objectの否定はfalse
alert(!!hoge); // true falseの否定はtrue

最初の何もつけない状態でtrueとして評価はできるけど、もし

if(hoge === true){...

とやった場合には真にならない。型に厳密じゃないJavaScriptで型をしっかり意識したい場合には有用かもしれない。