Сегодня начал писать проект частью которого были неубиваемые таймеры с Воркерами, выдерживающие полный перебор clearTimeout/clearInterval. Одним из условий было, что воркер или прочие функции/объекты могут подменить перед запуском скрипта. Для этого я написал функции
Но тут дело не в этих функциях и тем более не в моём проекте. Прогоняя всевозможные нативные объекты я наткнулся на вопиюще разное поведение браузеров при обработке объектов с typeof и toString.
Например, меня крайне поразил тот факт, что абсолютно все браузеры выдают разные значения на
Сафари во все нативные конструкторы и прототипы подсовывает Prototype, Constructor —
В статье описаны другие интересные случаи поведения браузеров с typeof и toString.
isNativeObject()
, isNativeFunction()
, каждая имеет с десяток условий и определяют подмену/не подмену функции/объекта и косвенных признаков указывающих на «мухлёж».Но тут дело не в этих функциях и тем более не в моём проекте. Прогоняя всевозможные нативные объекты я наткнулся на вопиюще разное поведение браузеров при обработке объектов с typeof и toString.
Например, меня крайне поразил тот факт, что абсолютно все браузеры выдают разные значения на
Worker.prototype + "";
// FF 3.6 [xpconnect wrapped native prototype]
// Op 11 [object DedicatedWorkerPrototype]
// Sa 4 [object WorkerPrototype]
// Ch 10 [object Object]
Сафари во все нативные конструкторы и прототипы подсовывает Prototype, Constructor —
[object WorkerConstructor], [object WorkerPrototype]
В статье описаны другие интересные случаи поведения браузеров с typeof и toString.