小白一命速通JS中的windowglobal對象

筆者注意到JS中的window對象與global對象經常被混淆,盡管它們在相當一部分使用情況下可以等同,但是本質上仍然存在很多不同,下面是對于兩者的詳細拆解


1. window 對象

  • 定義window 對象表示 瀏覽器環境中的全局上下文。
  • 作用域:它是瀏覽器中運行的任何 JavaScript 代碼的頂級對象。
  • 關鍵特性
    • 包含所有通過 var 聲明的 全局變量和函數(在非模塊腳本中)。
    • 表示瀏覽器的 窗口框架,代碼運行在其中。
    • 包含瀏覽器特定的屬性和方法,如:
      • window.location(當前 URL)
      • window.document(頁面的 DOM 樹)
      • window.alert()(彈出框)
    • 隱式引用/自動掛載:通過 var 聲明或未使用 let/const/var 創建的全局變量成為 window 的屬性。 隱式引用
示例
console.log(window.location.href); // 打印當前頁面的 URL
window.alert("Hello!"); // 顯示一個警告對話框

2. global對象

  • 定義global對象是所有 JavaScript 環境中(瀏覽器、Node.js 或其他)可用的頂級對象。
  • 作用域:它作為容器,包含所有全局可訪問的實體。
  • 關鍵特性
    • 它根據 執行環境 的不同而有所不同:
      • 在瀏覽器中,global對象是 window
      • 在 Node.js 中,global對象是 global
      • 在 Web Workers 中,global對象是 self
    • 包含全局內置對象,如 MathDateJSON 等。
Node.js 示例
console.log(global.setTimeout); // 通過 global 訪問 setTimeout
瀏覽器示例
console.log(window === global); // 在瀏覽器中為 true

3. 關鍵區別

方面window 對象global對象
作用域僅限于瀏覽器通用(瀏覽器、Node.js 等)
環境僅在瀏覽器中可用取決于環境(windowglobalself
內容包含瀏覽器特定的 API 和方法包含標準的全局對象(MathJSON 等)
全局變量作為 window 的屬性可訪問作為全局對象的屬性可訪問
Node.js 支持不可用使用 global 代替

4. 使用 globalThis 實現通用訪問

  • ES2020 引入了 globalThis,提供了一種不依賴于環境的通用方式來訪問全局對象:
    • 在瀏覽器中,globalThis 等同于 window
    • 在 Node.js 中,globalThis 等同于 global
    • 在 Web Workers 中,globalThis 等同于 self
示例
// 在不同環境中都有效
console.log(globalThis.setTimeout === setTimeout); // true

5. 重疊與差異

重疊

在瀏覽器中:

var x = 10; // 聲明一個全局變量
console.log(window.x); // 10(與 global.x 相同)
差異
// Node.js 示例
global.x = 10; // 在 global 中可用
console.log(global.x); // 10
console.log(window.x); // 錯誤:window 未定義

結論

  • 當處理與瀏覽器相關的功能(如 DOM 操作、位置、警告等)時,使用 window 對象
  • 使用 全局對象(或 globalThis 以確保跨環境兼容性)編寫與環境無關的代碼。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/67442.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/67442.shtml
英文地址,請注明出處:http://en.pswp.cn/web/67442.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

機器學習2 (筆記)(樸素貝葉斯,集成學習,KNN和matlab運用)

樸素貝葉斯模型 貝葉斯定理: 常見類型 算法流程 優缺點 集成學習算法 基本原理 常見方法 KNN(聚類模型) 算法性質: 核心原理: 算法流程 優缺點 matlab中的運用 樸素貝葉斯模型 樸素貝葉斯模型是基于貝葉斯…

HTB:Active[RE-WriteUP]

目錄 連接至HTB服務器并啟動靶機 信息收集 使用rustscan對靶機TCP端口進行開放掃描 將靶機TCP開放端口號提取并保存 使用nmap對靶機TCP開放端口進行腳本、服務掃描 使用nmap對靶機TCP開放端口進行漏洞、系統掃描 使用nmap對靶機常用UDP端口進行開放掃描 使用nmap對靶機…

Git圖形化工具【lazygit】

簡要介紹一下偶然發現的Git圖形化工具——「lazygit」 概述 Lazygit 是一個用 Go 語言編寫的 Git 命令行界面(TUI)工具,它讓 Git 操作變得更加直觀和高效。 Github地址:https://github.com/jesseduffield/lazygit 主要特點 主要…

58.界面參數傳遞給Command C#例子 WPF例子

界面參數的傳遞,界面參數是如何從前臺傳送到后臺的。 param 參數是從界面傳遞到命令的。這個過程通常涉及以下幾個步驟: 數據綁定:界面元素(如按鈕)的 Command 屬性綁定到視圖模型中的 RelayCommand 實例。同時&#x…

selenium定位網頁元素

1、概述 在使用 Selenium 進行自動化測試時,定位網頁元素是核心功能之一。Selenium 提供了多種定位方法,每種方法都有其適用場景和特點。以下是通過 id、linkText、partialLinkText、name、tagName、xpath、className 和 cssSelector 定位元素的…

51單片機(STC89C52)開發:點亮一個小燈

軟件安裝: 安裝開發板CH340驅動。 安裝KEILC51開發軟件:C51V901.exe。 下載軟件:PZ-ISP.exe 創建項目: 新建main.c 將main.c加入至項目中: main.c:點亮一個小燈 #include "reg52.h"sbit LED1P2^0; //P2的…

29. C語言 可變參數詳解

本章目錄: 前言可變參數的基本概念可變參數的工作原理如何使用可變參數 示例:計算多個整數的平均值解析: 更復雜的可變參數示例:打印可變數量的字符串解析: 總結 前言 在C語言中,函數參數的數量通常是固定的&#xff…

RoboMaster- RDK X5能量機關實現案例(一)識別

作者:SkyXZ CSDN:https://blog.csdn.net/xiongqi123123 博客園:https://www.cnblogs.com/SkyXZ 在RoboMaster的25賽季,我主要負責了能量機關的視覺方案開發,目前整體算法已經搭建完成,實際方案上我使用的上…

shell腳本批量修改文件名之方法(The Method of Batch Modifying File Names in Shell Scripts)

shell腳本批量修改文件名方法 我們可以使用Shell腳本來實現這個功能。Shell腳本是一種用于自動化任務的編程語言,它可以在Unix/Linux操作系統上運行。在這個腳本中,我們將使用一個for循環來遍歷目標目錄下的所有文件,并使用mv命令將每個文件…

MySQL誤刪數據怎么辦?

文章目錄 1. 從備份恢復數據2. 通過二進制日志恢復數據3. 使用數據恢復工具4. 利用事務回滾恢復數據5. 預防誤刪數據的策略總結 在使用MySQL進行數據管理時,誤刪數據是一個常見且具有高風險的操作。無論是因為操作失誤、系統故障,還是不小心執行了刪除命…

RDK X5運行DeepSeek-R1-Distill-Qwen-1.5B,體驗長思維鏈的語言大模型!

簡介 本文介紹了在RDK X5上,如何從HuggingFace的原始模型權重(safetensors)經過量化和編譯,的到llama.cpp推理框架所需要的GGUF格式的模型,然后演示了如何使用llama.cpp運行量化后的DeepSeek-R1-Distill-Qwen-1.5B模型…

SQL UCASE() 函數詳解

SQL UCASE() 函數詳解 在SQL中,UCASE() 函數是一個非常有用的字符串處理函數,它可以將字符串中的所有小寫字母轉換為大寫字母。本文將詳細介紹UCASE() 函數的用法、語法、示例以及其在實際應用中的優勢。 一、UCASE() 函數簡介 UCASE() 函數是SQL標準…

【Proteus仿真】【51單片機】簡易計算器系統設計

目錄 一、主要功能 二、使用步驟 三、硬件資源 四、軟件設計 五、實驗現象 聯系作者 一、主要功能 1、LCD1602液晶顯示 2、矩陣按鍵? 3、可以進行簡單的加減乘除運算 4、最大 9999*9999 二、使用步驟 系統運行后,LCD1602顯示數據,通過矩陣按鍵…

留學畢業論文如何利用不同問題設計問卷

在留學畢業論文的寫作中,我們經常會遇到各種問題,例如選擇合適的問題,選擇合適的研究方法,以及設計合理的研究過程。然而在完成留學畢業論文的過程中,我們往往會在研究設計這里卡住。即使我們選準了研究問題和研究方法…

深度學習在金融風控中的應用:突破傳統模型的瓶頸

深度學習在金融風控中的應用:突破傳統模型的瓶頸 金融風險控制(簡稱“風控”)是現代金融體系中至關重要的一環,關系到金融機構的穩定性、客戶的安全以及整體經濟的健康運行。近年來,隨著深度學習的迅猛發展,傳統的風控模型正面臨被顛覆的挑戰,新的技術手段和思維方式正…

Python中的函數(上)

Python中的函數是非常重要的編程概念,以下是詳細的介紹: 函數定義基礎 在Python中,函數是組織好的、可重復使用的代碼塊,用于執行特定任務。通過函數,我們可以將復雜的程序分解為較小的、更易管理的部分&#xff0c…

圖漾相機搭配VisionPro使用簡易教程

文章目錄 1.下載并安裝VisionPro軟件2.下載PercipioCameraForVisionPro軟件包3.軟件部署4.測試流程4.1 遍歷VisionPro SDK支持的參數4.2 設置示例4.2.1_cameraSingle.SetTriggerMode4.2.2 _cameraSingle.SetRegistration4.2.3_cameraSingle.SetInt4.2.4 _cameraSingle.GetInt4.…

新版IDEA創建數據庫表

這是老版本的IDEA創建數據庫表,下面可以自己勾選Not null(非空),Auto inc(自增長),Unique(唯一標識)和Primary key(主鍵) 這是新版的IDEA創建數據庫表,Not null和Auto inc可以看得到,但Unique和Primary key…

(非技術)從一公里到半程馬拉松:我的一年跑步經歷

在24年初,從來不運動的我,連跑步一公里都不能完成。而在一年之后的2025年的1月1日,我參加了上海的蒸蒸日上迎新跑,完成了半程馬拉松。雖然速度不快,也并不是什么特別難完成的事情,但對我來說還是挺有意義的…

論“0是不存在的”

你看這又是一個悖論的例子。 你會說,既然你都寫出來了“0”,咋還能說它不存在? 總是刷到謝爾頓說零不存在那個視頻。可能有些小伙伴不解其意,為啥那小謝爾頓堅持說0不存在。我這說一個最簡單的視角,怎么理解這句話。…