首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

深入理解 jQuery $.isWindow 實現原理:obj === obj.window 的邏輯與局限性

     編輯:程式設計疑難解答

源碼解讀

$.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 (誤判)

jQuery 內部使用場景

通常與其他檢查組合使用:先確定 typeof obj === 'object',再排除 Array、DOM 元素、Function 等,最後用 isWindow 排除 window,剩下的視為純粹的「Plain Object」(如 {a:1})。

現代替代

ES6+ 可用 obj instanceof Window(跨 iframe 需同源)或 Object.prototype.toString.call(obj) === '[object Window]' 更嚴謹。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved