[JS]BOM操作

介紹

BOM(Browser Object Model)是瀏覽器對象模型

  1. window對象是一個全局對象, 也是JS中的頂級對象
  2. 通過var定義在全局作用域中的變量和函數都會變成window對象的屬性和方法
  3. window對象下的屬性和方法調用時一般省略window

間歇函數

定時器

定時器是間歇函數的一種, 可以每個每隔一段時間, 重復執行代碼, 無需手動觸發

// 1.匿名函數
setInterval(()=>{}, 1000)// 2.函數名調用
function fn() {}
setInterval(fn, 1000) // 不帶(),否則只調用一次// 3.函數調用
function fn() {}
setInterval('fn()', 1000) // 不推薦// 4.清理定時器
clearInterval(定時器id);

注意:

  1. 完整寫法由window調用, 一般省略
  2. 延遲的毫秒數可以省略, 默認0
  3. 定時器創建后會返回 id, 用于清除定時器

延時器

延時器是間歇函數的一種, 可以延時指定時間, 然后執行代碼

// 1.匿名函數
setTimeout(()=>{}, 1000)// 2.函數名調用
function fn() {}
setTimeout(fn, 1000) // 不帶(),否則只調用一次// 3.函數調用
function fn() {}
setTimeout('fn()', 1000) // 不推薦// 4.清理定時器
clearTimeout(延時器id);

JS執行機制

  1. JS語言的特點之一就是單線程, 同一時間只能處理一個任務
  2. 這是因為JS設計的使命就是處理網頁中的用戶交互以及DOM操作, 這就要求程序中所有的任務都必須是線性的, 前一個任務結束, 再執行后一個任務, 只有這樣, 才能保證用戶交互和DOM操作是有序的, 不然同一時間添加一個元素又刪除這個元素, 程序就亂套了, 單線程正好符合這種設計要求
  3. 但是單線程也存在問題, 如果JS執行時間過長, 就會造成頁面渲染的不連貫, 導致頁面阻塞.
  4. 為了解決這個問題, HTML提出了Web Worker標準, 允許JS可以創建多個線程, 于是就有了同步和異步的概念,
  5. 同步任務就是放在主線程上, 立即執行的任務
  6. 異步任務就是交由宿主環境執行, 執行完成后推入任務隊列排隊的任務, JS的異步是通過回調函數實現的
  7. 為了保證同步任務和異步任務有序執行, 就有了事件循環的概念, 就是先執行主線程的同步任務, 等所有同步任務執行結束后, 再依次讀取任務隊列中的異步任務, 這種不斷讀取任務, 執行任務的機制, 稱為事件循環
  8. JS雖然通過事件循環實現了異步編程, 但是本質還是單線程語言
  9. 異步任務也可以分兩種, 一種是宿主環境執行的宏任務, 執行完畢后推入宏任務隊列, 一種是JS引擎執行的微任務, 執行完畢后推入微任務隊列, 主線程一旦閑置, 優先清空微任務執行, 再執行宏任務隊列

location對象

location對象拆分并保存了URL地址的各個組成部分

  1. location.href 獲取或設置整個URL
  2. location.host 返回域名
  3. location.port 返回端口號
  4. location.pathname 返回路徑
  5. location.search 返回 ? 后面的查詢參數
  6. location.hash 返回 # 后面的內容, 常用于錨點鏈接
  7. location.assign(); 可以跳轉頁面,有后退功能
  8. location.replace(); 替換當前頁面,不能后退
  9. location.reload(); 刷新當前頁面, 如果傳入true表示強制刷新(Ctrl + F5)

navigator對象

navigator對象記錄了瀏覽器相關的信息, 較常用的是userAgent屬性, 可以返回瀏覽器版本和平臺信息

<script>
if ((navigator.userAgent.match(/(phone|pad|pod|iPhone|iPod|ios|iPad|Android|Mobile|BlackBerry|IEMobile|MQQBrowser|JUC|Fennec|wOSBrowser|BrowserNG|WebOS|Symbian|Windows Phone)/i))) {window.location.href = "";   //手機
} else {window.location.href = "";  //電腦
} 
</script>

histroy對象

history對象可以與瀏覽器記錄進行交互.

  1. history.back(); 后退頁面
  2. history.forward(); 前進功能
  3. history.go(參數); 參數1前進頁面, 參數-1后退頁面

本地存儲

把數據存儲在用戶硬盤中, 由瀏覽器進行管理, 實現數據持久化存儲

sessionStorage
// 儲存數據
sessionStorage.setItem('key',value);
// 獲取數據
sessionStorage.getItem('key');
// 刪除數據
sessionStorage.removeItem('key');
// 刪除所有數據
sessionStorage.clear();
  1. 生命周期為關閉瀏覽器窗口;
  2. 在同一個窗口下數據可以共享
  3. 容量限制大約5M
localStorage
// 儲存數據
localStorage.setItem('key',value);
// 獲取數據
localStorage.getItem('key');
// 刪除數據
localStorage.removeItem('key');
// 刪除所有數據
localStorage.clear();
  1. 生命周期為永久,除非手動刪除;
  2. 在不同窗口下數據也可以共享(同一瀏覽器都可以);
  3. 容量限制大約20M
查看本地存儲數據

存儲復雜數據

本地存儲里面只能存儲字符串的數據格式, 如需需要儲存復雜數據, 就需要使用JSON對象

JSON對象就是 屬性 和 值 都由雙引號包裹的數據結構

// 序列化
// 把復雜數據轉換成JSON字符串
JSON.stringify(數據)// 反序列化
// 把JSON字符串還原成對象格式 
JSON.parse(數據)

窗口操作

//1.打開空窗口
window.open();   //2.打開窗口
// url文件路徑
// name新窗口的名稱
// features窗口屬性,大小等信息
// 會返回剛剛創建的窗口,用于關閉
window.open(url,[name],[features]);//3.關閉窗口
window.close();    //3.關閉剛剛創建的窗口
newWin.close();   //4.把當前窗口關閉
window.close();    

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

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

相關文章

酒店客房管理系統(Java+MySQL)

技術棧 Java: 作為主要編程語言。Swing GUI: 用于開發圖形用戶界面。MySQL: 作為數據庫管理系統。JDBC: 用于連接和操作MySQL數據庫。 功能要點 管理登錄認證 系統提供管理員登錄認證功能。通過用戶名和密碼驗證身份&#xff0c;確保只有授權的用戶可以訪問和管理酒店客房信…

【three.js案例二】時空隧道

import * as THREE from ./build/three.module.js // 引入軌道控制器擴展庫OrbitControls.js import { OrbitControls } from three/addons/controls/OrbitControls.js; // 引入dat.gui.js的一個類GUI import { GUI } from three/addons/libs/lil-gui.module.min.js;// 場景 co…

刷題——合并二叉樹

合并二叉樹_牛客題霸_牛客網 方法一&#xff1a; TreeNode* mergeTrees(TreeNode* t1, TreeNode* t2) {// write code hereif(t1 NULL) return t2;if(t2 NULL) return t1;TreeNode* head new TreeNode(t1->val t2->val);head->left mergeTrees(t1->left, t2-…

Supplemental Logging LOG DATA (ALL) COLUMNS

加的columns越多&#xff0c;說明一個普通的update中where 條件校驗的列越多 update "SCOTT"."EMP" set "ENAME" ALLKEY where "EMPNO" 7566 and "ENAME" JONES and "JOB" MANAGER and "MGR" 783…

Android Service兩種啟動方式的區別

在Android中&#xff0c;啟動Service的方式主要有兩種&#xff0c;分別是通過startService()和bindService()。以下是這兩種方式的詳細解釋&#xff1a; 1、通過startService()啟動Service&#xff1a; 這是最常用的啟動Service的方式。開發者可以通過Intent來指定要啟動的Se…

名企面試必問30題(十)——你有自己的方法論嗎?

1.思路 第一&#xff0c;方法論指的是做某些事情或業務的套路&#xff0c;但它沒有絕對的正確性&#xff0c;每個人都可以擁有專屬的方法論。 第二&#xff0c;方法論必定源自于自身實戰經驗的總結。 2.參考解答 “在軟件測試工作中&#xff0c;我逐漸形成了自己的一套方法論。…

python簡單爬蟲firefox selenium

# codingutf-8# 1.先設置編碼&#xff0c;utf-8可支持中英文&#xff0c;如上&#xff0c;一般放在第一行# 2.注釋&#xff1a;包括記錄創建時間&#xff0c;創建人&#xff0c;項目名稱。Created on 2019-11-25 author: Project: python selenium-打開和關閉瀏覽器 # 3.導入模…

學習記錄:`for` 語句與`while`語句的區別

for 語句與while語句的區別&#xff1a; for 和 while 語句都是循環控制結構&#xff0c;用于重復執行一段代碼直到滿足特定條件。盡管它們的基本目的是相似的&#xff0c;但它們的語法和一些使用場景有所不同。 for 語句&#xff1a; 用途&#xff1a;通常用于已知循環次數…

離線安裝docker社區版

以下是離線安裝 Docker 社區版的一般步驟&#xff1a; 準備工作&#xff1a; 在有網絡的環境下&#xff0c;從 Docker 官網下載適合你系統的 Docker 社區版安裝包以及相關依賴包。 傳輸安裝包到離線機器&#xff1a; 使用移動存儲設備或其他合適的方式將下載好的安裝包及依賴轉…

【劍指Offer系列】53-0到n中缺失的數字(index)

給定一個包含 [0, n] 中 n 個數的數組 nums &#xff0c;找出 [0, n] 這個范圍內沒有出現在數組中的那個數。 示例 1&#xff1a; 輸入&#xff1a;nums [3,0,1] 輸出&#xff1a;2 解釋&#xff1a;n 3&#xff0c;因為有 3 個數字&#xff0c;所以所有的數字都在范圍 [0,3]…

應用決策樹批量化自動生成【效果好】【非過擬合】的策略集

決策樹在很多公司都實際運用于風險控制,之前闡述了決策樹-ID3算法和C4.5算法、CART決策樹原理(分類樹與回歸樹)、Python中應用決策樹算法預測客戶等級和Python中調用sklearn決策樹。 本文介紹應用決策樹批量自動生成效果好,非過擬合的策略集。 文章目錄 一、什么是決策樹二…

數字化那點事:一文讀懂數字鄉村

一、數字鄉村的定義 數字鄉村是指利用信息技術和數字化手段&#xff0c;推動鄉村社會經濟發展和治理模式變革&#xff0c;提升鄉村治理能力和公共服務水平&#xff0c;實現鄉村全面振興的一種新型發展模式。它包括農業生產的數字化、鄉村治理的智能化、鄉村生活的現代化等方面…

Elasticsearch的節點、集群和分片

Elasticsearch的節點、集群和分片 節點 什么是節點 ES是使用Java語言開發的。ES可以創建多個節點&#xff0c;一個節點就是一個ES實例&#xff0c;也就是一個Java線程。ES在生產環境中每個節點都是分布在不同的服務器上的&#xff0c;目的是達到集群的高可用多個節點構成一個…

Nginx系列-1 Nginx安裝與使用

背景 最近對項目進行了Https改造&#xff0c;改造過程涉及Nginx技術&#xff0c;因此進行簡單總結。 從本文開始將開啟一個新的專題Nginx系列&#xff0c;用于收集Nginx相關的文章&#xff0c;內容將包括&#xff1a; Nginx系列—1 Nginx安裝與使用Nginx系列—2 Nginx配置Ngi…

記一次小程序滲透

這次的小程序滲透剛好每一個漏洞都相當經典所以記錄一下。 目錄 前言 漏洞詳情 未授權訪問漏洞/ 敏感信息泄露&#xff08;高危&#xff09; 水平越權&#xff08;高危&#xff09; 會話重用&#xff08;高危&#xff09; 硬編碼加密密鑰泄露&#xff08;中危&#xff0…

熟練掌握爬蟲技術

一、Crawler、Requests反爬破解 1. HTTP協議與WEB開發 1. 什么是請求頭請求體&#xff0c;響應頭響應體 2. URL地址包括什么 3. get請求和post請求到底是什么 4. Content-Type是什么1.1 簡介 HTTP協議是Hyper Text Transfer Protocol&#xff08;超文本傳輸協議&#xff09;…

整合 Mybatis Plus

什么是 MyBatis Plus&#xff1f; MyBatis Plus &#xff08;簡稱 MP&#xff09; 是一款持久層框架&#xff0c;說白話就是一款操作數據庫的框架。它是一個 MyBatis 的增強工具&#xff0c;就像 iPhone手機一般都有個 plus 版本一樣&#xff0c;它在 MyBatis 的基礎上只做增強…

NOI大綱——普及組——編碼

編碼 ##ASCLL碼 ASCII碼&#xff08;American Standard Code for Information Interchange&#xff0c;美國信息交換標準代碼&#xff09;是一種基于拉丁字母的字符編碼方案&#xff0c;主要用于表示文本數據。ASCII碼包含128個字符&#xff08;0-127&#xff09;&#xff0c…

2024最新boss直聘崗位數據爬蟲,并進行可視化分析

前言 近年來,隨著互聯網的發展和就業市場的變化,數據科學與爬蟲技術在招聘信息分析中的應用變得越來越重要。通過對招聘信息的爬取和可視化分析,我們可以更好地了解當前的就業市場動態、職位需求和薪資水平,從而為求職者和招聘企業提供有價值的數據支持。本文將介紹如何使…

python自動化辦公之PyPDF2

用到的庫&#xff1a;PyPDF2 實現效果&#xff1a;打開pdf文件&#xff0c;把每一頁的內容讀出來 代碼&#xff1a; import PyPDF2 # 打開pdf文件 fileopen(friday.pdf,rb) # 創建pdf文件閱讀器對象 readerPyPDF2.PdfReader(file) # 獲取pdf文件的總頁數 total_pageslen(rea…