$.isWindow = function(obj) {
return obj != null && obj === obj.window;
};window 對象有一個指向自身的屬性 window.window === window。利用這一特性,若 obj.window === obj 則判定為 window 對象。
任何滿足 obj.window === obj 的普通對象都會被誤判:
var a = {};
a.window = a;
console.log(a === a.window); // true
console.log($.isWindow(a)); // true (誤判)通常與其他檢查組合使用:先確定 typeof obj === 'object',再排除 Array、DOM 元素、Function 等,最後用 isWindow 排除 window,剩下的視為純粹的「Plain Object」(如 {a:1})。
ES6+ 可用 obj instanceof Window(跨 iframe 需同源)或 Object.prototype.toString.call(obj) === '[object Window]' 更嚴謹。