API-Window對象

學習目標:

  • 掌握Window對象

學習內容:

  1. BOM(瀏覽器對象模型)
  2. 定時器-延時函數
  3. JS執行機制
  4. location對象
  5. navigation對象
  6. history對象

BOM(瀏覽器對象模型):

  • BOM是瀏覽器對象模型。

在這里插入圖片描述

  • window對象是一個全局對象,也可以說是JavaScript中的頂級對象。
  • documentalert()console.log() 這些都是window屬性,基本BOM的屬性和方法都是window的。
  • 所有通過var定義在全局作用域中的變量、函數都會變成window對象的屬性和方法。
  • window對象下的屬性和方法調用的時候可以省略window。
<title>BOM-瀏覽器對象模型</title>
</head><body><script>// document.querySelector()// window.document.querySelector()// window對象是一個全局對象// 像document 、alert()、console.log() 都是window屬性console.log(document === window.document)  //truefunction fn() {console.log(11)}//所有通過var定義在全局作用域中的變量、函數都會變成window對象的屬性和方法window.fn()var num = 10console.log(window.num)</script></body>

定時器-延時函數:

JavaScript內置的一個用來讓代碼延遲執行的函數,叫setTimeout

  • 語法:
setTimeout(回調函數, 等待的毫秒數)

setTimeout僅僅只執行一次,所以可以理解為就是把一段代碼延遲執行,平時省略window。

  • 清除延時函數:
    let timer = setTimeout(回調函數, 等待的毫秒數)clearTimeout(timer)
  • 注意點:

    1.延時器需要等待,所以后面的代碼先執行。
    2.每一次調用延時器都會產生一個新的延時器。
    
  • 兩種定時器對比:執行的次數

延時函數執行一次
間歇函數每隔一段時間就執行一次,除非手動清除
  • 練習
<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>練習-5秒之后消失的廣告</title><style>img {position: fixed;left: 0;bottom: 0;}</style>
</head><body><img src="./images/ad.png" alt=""><script>//1.獲取元素const img = document.querySelector('img')setTimeout(function () {img.style.display = 'none'}, 5000)</script></body></html>

JS執行機制:

JavaScript語言的一大特點就是單線程,也就是說,同一個時間只能做一件事

這是因為JavaScript這門腳本語言誕生的使命所致——JavaScript是為處理頁面中用戶的交互,以及操作DOM而誕生的。比如我們對某個DOM元素進行添加和刪除操作,不能同時進行。應該先行添加,之后再刪除。

單線程就意味著,所有任務需要排隊,前一個任務結束,才會執行后一個任務。這樣所導致的問題是:如果JS執行時間過長,這樣就會造成頁面的渲染不連貫,導致頁面渲染加載阻塞的感覺。

為了解決這個問題,利用多核CPU的計算能力,HTML5提出Web Worker標準,允許JavaScript腳本創建多個線程。于是,JS中出現了同步異步

  • 同步

前一個任務結束后再執行后一個任務,程序的執行順序與任務的排列順序是一致的、同步的。

比如做飯的同步做法:我們要燒水煮飯,等水開了(10分鐘之后),再去切菜,炒菜。
  • 異步

你在做一件事情時,因為這件事情會花費很長時間,在做這件事的同時,你還可以去處理其他事情。

比如做法的異步做法:我們在燒水的同時,利用這10分鐘,去切菜,燒菜。

他們的本質區別:這條流水線上各個流程的執行順序不同。

  • 同步任務

同步任務都在主線程上執行,形成一個執行棧
在這里插入圖片描述

  • 異步任務

JS的異步是通過回調函數實現的。

一般而言,異步任務有以下三種類型:

1.普通事件clickresize
2.資源加載loaderror
3.定時器包括setIntervalsetTimeout

異步任務相關添加到 任務隊列中。(任務隊列也稱為消息隊列)
在這里插入圖片描述

  • 注意:
  1. 先執行執行棧中的同步任務
  2. 異步任務放入任務隊列中。
  3. 一旦執行棧中的所有同步任務執行完畢,系統就會按次序讀取任務隊列中的異步任務,于是被讀取的異步任務結束等待狀態,進入執行棧,開始執行。
    在這里插入圖片描述
  • 事件循環

由于主線程不斷地重復獲得任務、執行任務、再獲取任務、再執行,所以這種機制被稱為事件循環
在這里插入圖片描述

<title>事件循環</title>
</head><body><script>console.log(1)console.log(2)setTimeout(function () {console.log(3)}, 0)console.log(4);</script></body>

在這里插入圖片描述


location對象:

location的數據類型是對象,它拆分并保存了UPL地址的各個組成部分。

  • 常用屬性和方法
href屬性獲取完整的URL地址,對其賦值時用于地址的跳轉
search屬性獲取地址中攜帶的參數,符號?后面部分
hash屬性獲取地址中的哈希值,符號#后面部分
reload方法用來刷新當前頁面,傳入參數true時表示強制刷新
  • href屬性

獲取完整的URL地址,對其賦值時用于地址的跳轉。

// console.log(window.location)// console.log(location)//可以得到當前文件URL地址console.log(location.href)// 1. href 經常用href 利用js的方法去跳轉頁面location.href = 'http://www.baidu.com'

練習

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>練習-5秒之后跳轉的頁面</title><style>span {color: pink;}</style>
</head><body><a href="http://www.weibo.com">支付成功<span>5</span>秒鐘之后跳轉到首頁</a><script>//1.獲取元素const a = document.querySelector('a')//2.開啟定時器//3.聲明倒計時變量let num = 5let timerId = setInterval(function () {num--a.innerHTML = `支付成功<span>${num}</span>秒鐘之后跳轉到首頁`//如果num === 0 則停止定時器,并且完成跳轉功能if (num === 0) {clearInterval(timerId)//4.跳轉 location.hreflocation.href = 'http://www.weibo.com'}}, 1000)</script></body></html>
  • search屬性

獲取地址中攜帶的參數,符號?后面部分

console.log(location.search)
  • hash屬性

獲取地址中的哈希值,符號#后面部分

console.log(location.hash)

后期vue路由的鋪墊,經常用于不刷新頁面,顯示不同頁面。

比如網易云音樂
  • reload方法

用來刷新當前頁面,傳入參數true時表示強制刷新

<button class="reload">刷新</button><script>const reload = document.querySelector('.reload')reload.addEventListener('click', function () {// f5刷新頁面// location.reload()// 強制刷新 ctrl + f5location.reload(true)})</script>

navigation對象:

navigation的數據類型是對象,該對象下記錄了瀏覽器自身的相關信息。

  • 常用屬性和方法

通過userAgent檢測瀏覽器的版本及平臺。

// 檢測 userAgent(瀏覽器信息)!(function () {const userAgent = navigator.userAgent// 驗證是否為Android或iPhoneconst android = userAgent.match(/(Android);?[\s\/]+([\d.]+)?/)const iphone = userAgent.match(/(iPhone\sOS)\s([\d_]+)/)// 如果是Android或iPhone,則跳轉至移動站點if (android || iphone) {location.href = 'http://m.weibo.cn'}})();
<title>navigation對象-通過userAgent檢測瀏覽器版本及平臺</title><script>// 檢測 userAgent(瀏覽器信息)!(function () {const userAgent = navigator.userAgent// 驗證是否為Android或iPhoneconst android = userAgent.match(/(Android);?[\s\/]+([\d.]+)?/)const iphone = userAgent.match(/(iPhone\sOS)\s([\d_]+)/)// 如果是Android或iPhone,則跳轉至移動站點if (android || iphone) {location.href = 'http://m.weibo.cn'}})();// !(function () { })();!function () { }()</script>
</head><body>這是pc端的頁面<script>// (function () { })()</script>
</body>

history對象:

history的數據類型是對象,主要管理歷史記錄,該對象與瀏覽器地址欄的操作相對應。

比如前進、后退、歷史記錄等。
  • 常用屬性和方法
history對象方法作用
back()可以后退功能
forward()前進功能
go(參數)前進后退功能,參數如果是1前進1個頁面;如果是-1后退1個頁面
<title>history對象</title>
</head><body><button>后退</button><button>前進</button><script>const back = document.querySelector('button:first-child')const forward = back.nextElementSiblingback.addEventListener('click', function () {//后退一步// history.back()history.go(-1)})forward.addEventListener('click', function () {//前進一步// history.forward()history.go(1)})</script></body>

history對象一般在實際開發中比較少用,但是會在一些OA辦公系統中見到。

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

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

相關文章

Windows 11的市場份額越來越大了,推薦你升級!

7月1日&#xff0c;系統之家發布最新數據&#xff0c;顯示Windows 11操作系統的市場份額正在穩步上升。自2021年10月Windows 11發布以來&#xff0c;Windows 10一直占據著市場主導地位&#xff0c;當時其市場份額高達81.44%。然而&#xff0c;隨著時間的推移&#xff0c;Window…

鴻蒙學習1:ArkTS基礎入門

1 變量和常量 1.1 變量 常見的基礎數據類型&#xff1a; string 字符串、number 數字、boolean布爾 判斷。 變量&#xff1a;專門用來存儲數據的容器。 語法&#xff1a;let 變量名: 數據類型 值。例如&#xff1a;let name: 張三;let price:number 12.4; let isSuccess …

【triton-inference-server】 官方python_backend 文檔及例子

https://github.com/triton-inference-server/python_backend#building-from-source 一。 從源碼構建python_backend root@ubuntu-server:/home/ubuntu/hzh# sudo apt-get install rapidjson-dev libarchive-dev zlib1g-dev Reading package lists... Done Building dependency…

vue3中的自定義指令

全局自定義指令 假設我們要創建一個全局指令v-highlight&#xff0c;用于高亮顯示元素。這個指令將接受一個顏色參數&#xff0c;并有一個可選的修飾符bold來決定是否加粗文本。 首先&#xff0c;在創建Vue應用時定義這個指令&#xff1a;&#xff08;這里可以將指令抽離成單…

昂科燒錄器支持BPS晶豐明源半導體的多相Buck控制器BPD93004E

芯片燒錄行業領導者-昂科技術近日發布最新的燒錄軟件更新及新增支持的芯片型號列表&#xff0c;其中BPS晶豐明源半導體的多相Buck控制器BPD93004E已經被昂科的通用燒錄平臺AP8000所支持。 BPD93004E是一款多相Buck控制器&#xff0c;支持原生1~4相&#xff0c;數字方式控制&am…

科普文:一文搞懂jvm原理(二)類加載器

概敘 科普文&#xff1a;一文搞懂jvm(一)jvm概敘-CSDN博客 前面我們介紹了jvm&#xff0c;jvm主要包括兩個子系統和兩個組件&#xff1a; Class loader(類裝載器) 子系統&#xff0c;Execution engine(執行引擎) 子系統&#xff1b;Runtime data area (運行時數據區域)組件&am…

Cambrian-1: A Fully Open, Vision-Centric Exploration of Multimodal LLMs

摘要 https://arxiv.org/pdf/2406.16860v1 我們介紹了Cambrian-1&#xff0c;這是一系列以視覺為中心的多模態大型語言模型&#xff08;MLLMs&#xff09;。盡管更強大的語言模型可以增強多模態能力&#xff0c;但視覺組件的設計選擇往往沒有得到充分的探索&#xff0c;并且與…

學習筆記(linux高級編程)9

void pthread_cleanup_push(void (*routine)(void *)&#xff0c; void *arg); 功能&#xff1a;注冊一個線程清理函數 參數&#xff0c;routine&#xff0c;線程清理函數的入口 arg&#xff0c;清理函數的參數。 返回值&#xff0c;無 void pthread_cleanup_pop(int execute)…

Perl語言入門指南

一、緒論 1.1 Perl語言概述 1.2 Perl的特色 1.3 Perl面臨的問題 1.4 Perl語言的應用領域 二、Perl語言基礎 2.1 Perl語言的歷史發展 2.2 Perl語言的基本語法 2.3 Perl語言的數據類型 三、Perl語言控制結構 3.1 條件語句 3.2 循環結構 3.3 函數和子程序 四、Perl語…

OpenStack開源虛擬化平臺(一)

目錄 一、OpenStack背景介紹&#xff08;一&#xff09;OpenStack是什么&#xff08;二&#xff09;OpenStack的主要服務 二、計算服務Nova&#xff08;一&#xff09;Nova組件介紹&#xff08;二&#xff09;Libvirt簡介&#xff08;三&#xff09;Nova中的RabbitMQ解析 OpenS…

MySQL-數據操作類型的角度理解 S鎖 X鎖

文章目錄 1、S鎖和S鎖互相兼容2、S鎖和X鎖互斥3、X鎖和X鎖也互斥4、X鎖和S鎖也互斥5、select * from account for update;6、select * from account for update nowait;7、select * from account for update skip locked; 1、S鎖和S鎖互相兼容 2、S鎖和X鎖互斥 3、X鎖和X鎖也互…

20240702 每日AI必讀資訊

&#x1f50d;GPTPdf&#xff1a;使用類似GPT-4o的多模態LLM分析PDF文件 - 使用類似 GPT-4o 多模態模型解析 PDF 文件&#xff0c;轉換為 Markdown 格式。 - 代碼簡潔高效&#xff0c;僅293行。 - 解析結果幾乎完美包括排版、數學公式、表格、圖片、圖表等內容。 &#x1…

【記錄】IDEA2023的激活與安裝

前言&#xff1a; 記錄IDEA2023的激活與安裝 第一步&#xff1a;官網下載安裝包&#xff1a; 下載地址&#xff1a;https://www.jetbrains.com/idea/download/other.html 這個最好選擇2023版本&#xff0c;用著很nice。 安裝步驟就不詳解了&#xff0c;無腦下一步就可以了…

(四十七)Vue Router之路由守衛

文章目錄 概念全局路由守衛全局前置守衛全局解析守衛全局后置路由守衛 獨享路由守衛組件內的守衛beforeRouteEnterbeforeRouteUpdatebeforeRouteLeave 完整的導航解析流程 上一篇&#xff1a;&#xff08;四十六&#xff09;Vue Router組件所獨有的兩個鉤子activate、deactivat…

VLAN原理與配置

AUTHOR &#xff1a;閆小雨 DATE&#xff1a;2024-04-28 目錄 VLAN的三種端口類型 VLAN原理 什么是VLAN 為什么使用VLAN VLAN的基本原理 VLAN標簽 VLAN標簽各字段含義如下&#xff1a; VLAN的劃分方式 VLAN的劃分包括如下5種方法&#xff1a; VLAN的接口鏈路類型 創建V…

Android system.img掛載和解除掛載

Android system.img掛載和解除掛載 解包后的super.img&#xff0c;里面最重要的是system.img文件&#xff0c;如何對system.img進行掛載和解除掛載是需要掌握的能力 基礎知識 system.img、vendor.img 都存在兩種格式raw,sparse &#xff0c;在ubuntu命令窗口下執行下執行&am…

深度學習之生成對抗網絡 BigGAN

BigGAN(Big Generative Adversarial Networks)是生成對抗網絡(GAN)的一種變體,專注于生成高質量、大尺寸的圖像。BigGAN 是由 DeepMind 的研究人員于 2018 年提出的。其核心思想是通過增加模型的規模(更深的網絡和更多的參數)來提高生成圖像的質量,同時引入一些新的技術…

便簽 Pro(Mac 智能便簽工具)專業版怎么樣,值得購買嗎?

使用 Mac 的小伙伴平時都是怎么記錄工作生活中的碎片信息&#xff1f;用聊天軟件&#xff0c;還是系統備忘錄呢&#xff1f; 實際體驗下來&#xff0c;其實都難以稱得上好用。 趕緊來了解一下 Mac 多彩思維速記工具便簽 Pro&#xff01;擁有智能邊框大小、iCloud 同步、歷史記…

矩陣置零解題

給定一個 m x n 的矩陣&#xff0c;如果一個元素為 0 &#xff0c;則將其所在行和列的所有元素都設為 0 。請使用 原地 算法。 示例 1&#xff1a; 輸入&#xff1a;matrix [[1,1,1],[1,0,1],[1,1,1]] 輸出&#xff1a;[[1,0,1],[0,0,0],[1,0,1]]示例 2&#xff1a; 輸入&…

VUE3解決跨域問題

本文基于vue3 vite element-plus pnpm 報錯&#xff1a;**** has been blocked by CORS policy: No Access-Control-Allow-Origin header is present on the requested resource. 原因&#xff1a;前端不能直接訪問其他IP&#xff0c;需要用vite.config.ts &#xff0…