Node.js 4.xで廃止となったutil.is系メソッドの代替案
Node.jsの最新長期サポート版(LTS)であるv4.3.0では、それまで利用できたutil.isArray()やutil.isRegExp()、util.isDate()などのメソッドがDeprecated(廃止予定)扱いとなっています(v4.x系のドキュメント、v0.12.x系のドキュメント)。
ドキュメントには理由が説明されておらず、代替案も掲載されていないのですが、StackOverflowでの情報によると、「後方互換性がなくなるために修正したくないから」だそうです。例としてutil.isObject()に関数オブジェクトを与えると戻り値はfalseになりますが、JavaScript(ECMAScript)の言語仕様上は関数オブジェクトもオブジェクトであり、これは不適切な実装であることが挙げられています。
isArrayとかisStringとかはあっても良いのでは……と思いますが、まあほかのコードで代替可能なのでコアからは削除する、というのは理解できます。ということで代替案ですが、下記のようにisinstanceof演算子で代替できます。
$ node > [] instanceof Array true > [] instanceof Object true > [] instanceof String false
なお面倒臭いことに、instanceof演算子はプリミティブ型(文字列や数値型など、オブジェクトではないもの)に対してはすべてfalseを返します。そのため、プリミティブ型に対してはtypeof演算子の戻り値を使用して判断する必要があります。
> typeof a 'string' > typeof [] 'object' > typeof 10.1 'number' > typeof /ABC/ 'object'