Похоже, что Google Chrome возвращает ложные срабатывания:
var isTouch = 'ontouchstart' in document.documentElement;
Я полагаю, что это как-то связано с его способностью "эмулировать сенсорные события" (F12 -> настройки в правом нижнем углу -> вкладка "переопределения" -> последний флажок). Я знаю, что по умолчанию он отключен, но это то, с чем я связываю изменение результатов (метод "in", используемый для работы в Chrome).
Однако, похоже, это работает, насколько я тестировал:
var isTouch = !!("undefined" != typeof document.documentElement.ontouchstart);
Все браузеры, в которых я запускаю этот код в состоянии, typeof является "объектом", но я чувствую себя более уверенным, зная, что это что-то, но не определено
Протестировано на IE7, IE8, IE9, IE10, Chrome 23.0.1271.64, Chrome для iPad 21.0.1180.80 и iPad Safari. Было бы здорово, если бы кто-то сделал еще несколько тестов и поделился результатами.