if文やwhile文といった条件式で暗黙の型変換が行われる際、falseとして評価されるものは以下の通り。
・数値0
・数値NaN
・null値
・undefined値
・空白文字列”
上記以外の値は全てtrueとなる。
また、ブーリアン型への変換時にもイディオムが存在し「!」演算子を用いることで実現している。
!演算はブーリアン型のオペランドに対する論理否定演算なため、評価対象がブーリアン型でなければ、上記のルールに則り暗黙の型変換が行われる。
そのため!演算を二つ重ね!!とする事で否定の否定となり、最終的にブーリアン型への変換機能だけが残るのである。
> !1; false > !!1; true > !!'a'; true > !!'0'; true > !!0; false > !!''; false > !!null; false
といった具合。
またブーリアン型への型変換で注意すべきポイントとして、オブジェクト型の評価結果がある。
オブジェクト型をブーリアン型に変換すると必ずtureを返却するため、下記のようなコードであってもtrueが返却されるので注意されたし。
> var bool = new Boolean(false); !!bool; true
ここでいうboolはBooleanクラスのインスタンス(オブジェクト)であるため、変換結果はtrueとなる(中身はfalse)。
※厳密に言うとJSにクラスは存在しないが言語仕様上の破綻は起こらないため、便宜上クラスという文言を用いた。