Ответ 1
Короткий ответ заключается в том, что typeof /foo/
- это функция в браузерах Webkit. CMS имеет длинное объяснение @jQuery's isFunction и InternetExplorer
И instanceOf
не является надежным, так как Zuriy указывает:
Проблемы возникают, когда дело доходит до сценариев в многокадровых средах DOM. В двух словах объекты Array, созданные внутри одного iframe, не разделяют [[Prototype]] s с массивами, созданными в другом iframe. Их конструкторы представляют собой разные объекты, поэтому проверки экземпляров и конструкторов не выполняются:
Отличная статья @http://perfectionkills.com/instanceof-considered-harmful-or-how-to-write-a-robust-isarray/ от Zuriy по этому вопросу.
Пример, взятый из статьи:
var iframe = document.createElement('iframe');
document.body.appendChild(iframe);
xArray = window.frames[window.frames.length-1].Array;
var arr = new xArray(1,2,3); // [1,2,3]
// Boom!
arr instanceof Array; // false
// Boom!
arr.constructor === Array; // false