Вы должны были бы сделать ===
(или !==
) против списка принятых значений (который не будет таким длинным, исходя из вашего вопроса), зная, что это можно обмануть, заставив думать, что что-то было это был натив (просто из другого окна).
Но в основном:
if (obj !== Array &&
obj !== String &&
obj !== Date &&
/* ...and so on, there are only a few of them... */
) {
throw "your error";
}
Редактировать Мой комментарий о вещах из других окон: Помните, что конструкторы из одного окна не ===
для конструкторов из другого окна (включая фреймы), например ::
var wnd = window.open('blank.html');
alert("wnd.Array === Array? " + (wnd.Array === Array));
alerts "wnd.Array === Array? False" , поскольку Array
в wnd
не совпадает с Array
в текущем окне, даже если оба они построены конструкторы для массивов.