2017JavaScriptPHPSymboltypeofJavaScriptにはオブジェクトや配列などの引数に与えた変数(値)が「空」かどうかを判定する関数がない。いったビルトインメソッドがないのだ。的な関数を自作してみた(実際のソースは後述)。その際、JavaScriptでの様々な「型」における「空」の判定について調査して、色々と気づいたことも多かったので、この記事にまとめてみた次第。JavaScriptにおける「型」別の「空」についてまず、JavaScriptにおいて変数が「空」であるという定義にはブレがある、というか一意な解釈がないという方が正しいのかもしれない。それが「空」を判定するようなビルトインメソッドがないことに繋がっているのだろう。変数型ごとの「空」の解釈が利用者に依存しているような状況なうえ、さらにECMAScript6で追加された「シンボル」型がその定義をさらに混沌とさせている(ような気がする)。理論だけだといまいちピンとこないので、有名どころのライブラリである「is.js」と「underscore.js」を引き合いにして、実際に値の「空」がどのように判定されているかを例示してみよう。あるべき期待値についての解釈には個人差があるかもしれない。それこそが、JavaScriptにおける「空」判定の難しさであり、混沌の深淵でもある。よる判定結果は下記の通りだ。使う何気に、PHPの「空」判定も十分にカオスなのだが、判定指針がユーザー任せのJavaScriptよりはだいぶマシであり、参考にできるのではないかと。PHPの「空」判定については、下記の記事が抜群にわかりやすい。罠がある前述した通り、JavaScriptで「空」判定を行うにあたっては変数の「型」の識別が重要になってくる。変数の型を判定して、それぞれの型に沿って値が「空」かどうかを調べるという手順になるからだ。そこで、JavaScriptにおける型について簡単におさらいしておこう。下記の記事が非常に参考になる。JavaScriptの型などの判定いろいろJavaScriptの「型」の判定について上記の記事で云われているように、JavaScriptにおけるオブジェクト型には内包される要素が非常に多い。──ということを踏まえて、JavaScriptでの型を一覧化してみると次のようになる。本来は「Null」型に分類されるべきところだが、実際にはオブジェクト型と判定される。