JavaScriptでのTruthy/Falsy
仕様は、ECMAScript Language Specification - 9.2 ToBooleanにあります。これによれば、falseとして扱われるのは次の6つです。
- undefined
- null
- false
- 0
- NaN
- "" (空文字列)
Boolean関数を使って確認してみました。
"false"がtrueとして扱われることが確認できました。
問題になるケース
問題になるケースとしては、サーバーサイドの言語からJavaScriptへ、type="hidden"のinputのvalueへfalseをセットする場合が考えられます。サーバーでセットされた値を使用して、次のようなif文を書くと問題が発生します。
回避するには、明示的に"true"と比較するのがいいでしょう。
// <input id="someElement" type="hidden" value="false" />のとき if (document.getElementById('someElement').value) { // このブロックが実行される ... }
回避するには、明示的に"true"と比較するのがいいでしょう。
// <input id="someElement" type="hidden" value="false" />のとき if ("true" === document.getElementById('someElement').value) { // このブロックは実行されない ... }
JavaScriptの型は独特のゆるさがあるので、ついついチェックがあまくなりがちです。しかし、今自分がどんな型を扱おうとしているのか把握していないと、思わぬところでハマってしまいます。という記事でした。
おまけ
「Boolean型に変換するAPIはないのか」と思って調べてみましたが、次のような結果に。
参考
ECMAScript Language Specification
おまけ
「Boolean型に変換するAPIはないのか」と思って調べてみましたが、次のような結果に。
参考
ECMAScript Language Specification
0 件のコメント:
コメントを投稿