Зачем вообще на toString надеяться? В таких случаях разработчики туда все что угодно имеют право запихать, так же как они имеют право писать любые удобные для них комментарии к своему коду. Стандарты здесь никак не ограничивают и как вообще они могут ставить здесь какие-то ограничения. И js-разработчики не должны строить свой код на результате toString (по крайней мере, вызываемого у Function, Object и т. д.) . К сожалению многие уже настолько привыкли к тому, что он в таких случаях одно и то же возвращает, что уже браузер на основе этого определяют:
var isOpera = Object.prototype.toString.call(window.opera) == '[object Opera]';
Это на мой взгляд совсем не верно, в любой следующей версии '[object Opera]' может поменяться на все что угодно. И вообще молодцы что так делают, надо отучать от плохих привычек.