К сожалению, window.navigator.userAgent не даёт достаточно сведений о браузере. Например, те же Opera и Safari имеют функции подмены юзерагента и сайты, базированные на юзерагенте, неправильно определяют, какой на самом деле браузер перед ними.
Точное определение версии может понадобиться, например, при ограничении доступа определенных браузеров к сайту, например, Opera не обрабатывает нажатие правой кнопки мыши, что является очень большим минусом и т.п.
Итак, проведя некоторые исследования, я смог обнаружить "метки", отличные от userAgent, в браузерах, которые определенно показывают версию.
Opera:
window.opera - точно указывает на то, что браузер - Opera
window.opera.version() - возвращает версию Opera
Chrome:
window.chrome - объект, специфичный для Chrome
window.chromium - характерен для браузеров на движке Chromium
Стоит отметить, что он, как и Safari базирован на WebKit и в его userAgent дополнительно пишется Safari.
Safari:
window.navigator.vendor="Apple Computer, Inc." - всегда так, не в зависимости, на какой юзерагент эмулируется. К сожалению, будет недостаточно для определения, мобильный ли это браузер.
IE:
Общеизвестные условные комментарии, система событий, currentStyle и многое другое.
Mozilla:
window.mozInnerScreenX и другие расширяющие moz-свойства
Другие браузеры менее распространены, поэтому я не занимался их изучением.
Если есть неточность, поправьте меня
P.S. Определять версию совсем не глупость. Старые версии могут уметь делать "что-либо" но с глюками, а, определив версию, можно учитывать это обстоятельство.