を参考にして、次の関数で判定してみました。
function () { return ( 'ontouchstart' in window || navigator.maxTouchPoints > 0 || navigator.msMaxTouchPoints > 0 ) }
タッチ出来るかどうかで判定します。 これだとsurfaceみたいなタッチできるPCもモバイル機器に判定しちゃうんですよね・・・。
もう一つ考えられるのはwindowの幅が768pxとかで、判定する方法です。 レスポンシブデザインとかそうですよね。 ブラウザの幅を小さくしたときに、やっぱり上手く行かなさそうな気はします。
定石の判定方法があるのでしょうか? 自分で調整するには、実機がないと難しそうな感じはします。
僕の場合は本当に欲しい情報は「入力デバイスとして物理キーボードが使えるかどうか」です。 物理キーボードが主の道具で、使えない場合に代替え手段を用意しています。 これもJavaScriptから判定するのは難しそうです。