JavaScript → Поведения браузеров с typeof и toString
Сегодня начал писать проект частью которого были неубиваемые таймеры с Воркерами, выдерживающие полный перебор 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.
.NET → Возвращаясь к конструкции foreach с Duck Typing для LINQ
Обещаю, что в этот раз будет короткая статья (относительно). Все вы знаете языковую конструкцию foreach в C#, не так ли? Но подумайте дважды прежде чем сказать как именно работает следующий код:
Уже знаете ответ? Позвольте мне разочаровать вас: если у вас только один ответ, то вы ошибаетесь. Нет единственного ответа на поставленный вопрос, поскольку вы должны знать больше о типе переменной src чтобы принять окончательное решение насчет того, как вышеприведенный код работает…
- foreach (int x in src)
- {
- // Do something with x.
- }
* This source code was highlighted with Source Code Highlighter.Уже знаете ответ? Позвольте мне разочаровать вас: если у вас только один ответ, то вы ошибаетесь. Нет единственного ответа на поставленный вопрос, поскольку вы должны знать больше о типе переменной src чтобы принять окончательное решение насчет того, как вышеприведенный код работает…