よくあるやつです。ES2015 で色々増えたので、プリミティブじゃないのが欲しい。
typeof() 演算子(関数ではない)は [] も {} も Map() も object なので困る。
小文字にして、雑に二回 .replace() していい感じの文字列にして返している。RegExp ?めんどい。
詳細はここ。自前の class に対しては instances instanceOf MyClass とかになる。それでも汚染の可能性があるらしい。まぁ、その辺は書く人間がちゃんとしろという話…かな?