日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當前位置:首頁 > 科技  > 軟件

前端中的那些 This vs That,你知道嗎?

來源: 責編: 時間:2024-06-05 17:45:44 143觀看
導讀前端知識中有很多相近的概念或 API,相信不少人在開發中有注意到這些相近的概念或 API,但是有時不會深入去了解異同,只要某個 API 能滿足開發需求即可。本文將介紹一些相近的概念和 API,讓你能更清晰地了解它們的異同,在使

前端知識中有很多相近的概念或 API,相信不少人在開發中有注意到這些相近的概念或 API,但是有時不會深入去了解異同,只要某個 API 能滿足開發需求即可。9IA28資訊網——每日最新資訊28at.com

本文將介紹一些相近的概念和 API,讓你能更清晰地了解它們的異同,在使用時更游刃有余。9IA28資訊網——每日最新資訊28at.com

1. cookie vs localStorage vs sessionStorage

前端開發中,這三個本地存儲方案可以說是很常見的,用一張圖說明下它們的區別:9IA28資訊網——每日最新資訊28at.com

圖片圖片9IA28資訊網——每日最新資訊28at.com

2. querySelectorAll vs getElementsByTagName

querySelectorAll 可以根據傳入的 CSS 選擇器查找 HTML 元素,使用上比 getElementsByTagName 更靈活。9IA28資訊網——每日最新資訊28at.com

它們之間的不同點在于:querySelectorAll 返回的是一個靜態的 NodeList,而 getElementsByTagName 返回的是動態的。9IA28資訊網——每日最新資訊28at.com

來看下面這個示例:9IA28資訊網——每日最新資訊28at.com

<ul>    <li>1</li>    <li>2</li>    <li>3</li></ul>

接下來使用兩個方法獲取 li 元素類數組,然后再動態插入一個 li,最后查看兩個類數組的長度。9IA28資訊網——每日最新資訊28at.com

const listItems = document.querySelectorAll('li');const listItems2 = document.getElementsByTagName('li');console.log(listItems.length, listItems2.length);  // 3,3const list = document.querySelector('ul');const li = document.createElement('li');li.innerHTML = '4';list.appendChild(li);console.log(listItems.length, listItems2.length);  // 3, 4

可以看到 querySelectorAll 方法獲取的類數組長度在動態添加 li 后還是 3,而 getElementsByTagName 的為 4。9IA28資訊網——每日最新資訊28at.com

常用的獲取元素方法中getElementsByClassName 方法、element.childNodes 和 element.children 返回的也是動態 NodeList。9IA28資訊網——每日最新資訊28at.com

3. children vs childNodes

children 和 childNodes 都可以用來獲取元素的子節點,不同的是 children 只會獲取 HTML 元素節點,而 childNodes 會獲取到非 HTML 元素節點,包括文本、注釋節點等。9IA28資訊網——每日最新資訊28at.com

<ul>    <!-- 這里有有些內容 -->    <li>A</li>    <li>B</li>    <li>C</li></ul>
const parent = document.querySelector('ul');// 輸出 HTMLCollection(3) [li, li, li]console.log(parent.children)// 輸出 NodeList(10) [text, comment, text, text, li, text, li, text, li, text]console.log(parernt.childNodes)

4. microtasks vs macrotasks

宏任務和微任務概念也經常在前端中出現,與之相關的就是事件循環機制。事件循環機制是必須掌握的,宏任務和微任務也可以了解下,實際開發中碰到相關問題能反應過來是宏任務和微任務的不同即可。9IA28資訊網——每日最新資訊28at.com

宏任務包括:9IA28資訊網——每日最新資訊28at.com

  • setTimeout and  setInterval 的回調
  • DOM 操作
  • I/O 操作 (Node 中讀寫文件)
  • requestAnimationFrame

微任務包括:9IA28資訊網——每日最新資訊28at.com

  • Promises 的 resolve 和 reject
  • MutationObserver 回調
  • Node 中的 process.nextTick

事件循環機制如下圖:9IA28資訊網——每日最新資訊28at.com

圖片圖片9IA28資訊網——每日最新資訊28at.com

宏任務微任務執行順序如下圖:9IA28資訊網——每日最新資訊28at.com

圖片圖片9IA28資訊網——每日最新資訊28at.com

最后配合一個例子看下效果:9IA28資訊網——每日最新資訊28at.com

console.log('Script start')setTimeout(function () {  console.log('setTimeout')}, 0)new Promise((resolve) => {  console.log('Promise')}).then(function () {  console.log('Promise then')})console.log('Script end')// 輸出順序為: Script start、Promise、Script end、Promise then、setTimeout

一個更清晰的圖(源[2]):9IA28資訊網——每日最新資訊28at.com

圖片圖片9IA28資訊網——每日最新資訊28at.com

5. setTimeout(0) vs requestAnimationFrame

setTimeout(0) 和 requestAnimationFrame 都能把代碼延遲到下一個動畫幀運行,它們的不同在于:9IA28資訊網——每日最新資訊28at.com

  • setTimeout(0) 將代碼推到事件循環的任務隊列中,如果任務隊列中有大量任務,setTimeout(0) 就不會立即執行。
  • requestAnimationFrame 會在下一次渲染前執行,而不是在事件循環中執行,它能自動與顯示器刷新率同步。不過,它只有在瀏覽器準備好渲染新幀時才會執行,如果標簽頁處于非激活狀態,它就不會運行。

處理動畫時,requestAnimationFrame 更合適, 如果你要延遲執行代碼的話,可以直接使用 setTimeout(0)。9IA28資訊網——每日最新資訊28at.com

補充一個小點:setTimeout 的語法是  setTimeout(functionRef, delay, param1, param2, /* … ,*/ paramN),除了回調函數和延遲時間,后續參數都會作為回調函數的參數。9IA28資訊網——每日最新資訊28at.com

// 1 秒后輸出 delay 1ssetTimeout(console.log, 1000, 'delay 1s')

6. naturalWidth vs width

naturalWidth 是元素的自然寬度,它永遠不會改變。例如,一張 100px 寬的圖片的 naturalWidth 始終是 100px,即使通過 CSS 或 JavaScript 調整圖片大小后也不變。9IA28資訊網——每日最新資訊28at.com

而 width 是可以改變的,可以通過 CSS 或 JavaScript 設置。9IA28資訊網——每日最新資訊28at.com

圖片圖片9IA28資訊網——每日最新資訊28at.com

7. stopImmediatePropagation vs stopPropagation

stopImmediatePropagation() 方法與 stopPropagation() 方法一樣,可阻止事件冒泡。但是,stopImmediatePropagation() 方法會阻止元素同一事件的其他監聽器。9IA28資訊網——每日最新資訊28at.com

button.addEventListener('click', function () {  console.log('foo')})button.addEventListener('click', function (e) {  console.log('bar')  e.stopImmediatePropagation()})button.addEventListener('click', function () {  console.log('baz')})

上面代碼中按鈕點擊后只會輸出 foo and bar,baz 的事件監聽函數不會觸發。9IA28資訊網——每日最新資訊28at.com

8. HTML 字符實體 vs Unicode 字符

HTML 實體是特殊字符序列,用來表示可能被誤認為是 HTML 代碼的字符,如小于號 (<) 或雙引號 (&)。9IA28資訊網——每日最新資訊28at.com

下面是一些常見的 HTML 實體:9IA28資訊網——每日最新資訊28at.com

  • &lt; 代表小于號 <
  • &gt; 代表大于號 >
  • &amp; 代表于符號 &
  • &quot; 代表雙引號 "
  • &apos; 或 &#39; 代表單引號 '
  • &nbsp; 代表空格

HTML 字符實體相比 Unicode 字符會更好記些,同時瀏覽器對 HTML 字符實體支持更好。9IA28資訊網——每日最新資訊28at.com

Unicode 是表示字符或符號的特定代碼,它們用于顯示標準字符集中可能沒有的字符,如非拉丁字母或特殊符號。9IA28資訊網——每日最新資訊28at.com

一些 Unicode 字符示例:9IA28資訊網——每日最新資訊28at.com

標簽:
  • 熱門焦點
  • 6月iOS設備好評榜:第一蟬聯榜首近一年

    作為安兔兔各種榜單里變化最小的那個,2023年6月的iOS好評榜和上個月相比沒有任何排名上的變化,僅僅是部分設備好評率的下降,長年累月的用戶評價和逐漸退出市場的老款機器讓這
  • 容量越大越不壞?24萬塊硬盤故障率報告公布 這些產品零故障

    8月5日消息,云存儲服務商Backblaze發布了最新的硬盤故障率報告,年故障率有所上升。Backblaze發布的硬盤季度統計數據,其中包括故障率等重要方面。這些結
  • 2023 年的 Node.js 生態系統

    隨著技術的不斷演進和創新,Node.js 在 2023 年達到了一個新的高度。Node.js 擁有一個龐大的生態系統,可以幫助開發人員更快地實現復雜的應用。本文就來看看 Node.js 最新的生
  • 讓我們一起聊聊文件的操作

    文件【1】文件是什么?文件是保存數據的地方,是數據源的一種,比如大家經常使用的word文檔、txt文件、excel文件、jpg文件...都是文件。文件最主要的作用就是保存數據,它既可以保
  • JavaScript學習 -AES加密算法

    引言在當今數字化時代,前端應用程序扮演著重要角色,用戶的敏感數據經常在前端進行加密和解密操作。然而,這樣的操作在網絡傳輸和存儲中可能會受到惡意攻擊的威脅。為了確保數據
  • 使用Webdriver-manager解決瀏覽器與驅動不匹配所帶來自動化無法執行的問題

    1、前言在我們使用 Selenium 進行 UI 自動化測試時,常常會因為瀏覽器驅動與瀏覽器版本不匹配,而導致自動化測試無法執行,需要手動去下載對應的驅動版本,并替換原有的驅動,可能還
  • 使用AIGC工具提升安全工作效率

    在日常工作中,安全人員可能會涉及各種各樣的安全任務,包括但不限于:開發某些安全工具的插件,滿足自己特定的安全需求;自定義github搜索工具,快速查找所需的安全資料、漏洞poc、exp
  • 破圈是B站頭上的緊箍咒

    來源 | 光子星球撰文 | 吳坤諺編輯 | 吳先之每年的暑期檔都少不了瞄準追劇女孩們的古偶劇集,2021年有優酷的《山河令》,2022年有愛奇藝的《蒼蘭訣》,今年卻輪到小破站抓住了追
  • 消費結構調整丨巨頭低價博弈,拼多多還卷得動嗎?

    來源:征探財經作者:陳香羽隨著流量紅利的退潮,電商的存量博弈越來越明顯。曾經主攻中高端與品質的淘寶天貓、京東重拾&ldquo;低價&rdquo;口號。而過去與他們錯位競爭的拼多多,靠
Top 主站蜘蛛池模板: 竹溪县| 兴城市| 嘉峪关市| 台安县| 新竹县| 舒城县| 宝鸡市| 汝南县| 柞水县| 泽州县| 安宁市| 出国| 读书| 兴化市| 高雄市| 祁阳县| 南岸区| 祁东县| 都昌县| 镇雄县| 临泉县| 绥棱县| 宜兴市| 土默特右旗| 大石桥市| 普兰县| 洛南县| 克山县| 沿河| 格尔木市| 九龙城区| 巴楚县| 洛阳市| 噶尔县| 叶城县| 托里县| 开鲁县| 司法| 伽师县| 高要市| 博罗县|