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

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

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

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

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

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

1. cookie vs localStorage vs sessionStorage

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

圖片圖片8bL28資訊網——每日最新資訊28at.com

2. querySelectorAll vs getElementsByTagName

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

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

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

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

接下來使用兩個方法獲取 li 元素類數組,然后再動態插入一個 li,最后查看兩個類數組的長度。8bL28資訊網——每日最新資訊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。8bL28資訊網——每日最新資訊28at.com

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

3. children vs childNodes

children 和 childNodes 都可以用來獲取元素的子節點,不同的是 children 只會獲取 HTML 元素節點,而 childNodes 會獲取到非 HTML 元素節點,包括文本、注釋節點等。8bL28資訊網——每日最新資訊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

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

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

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

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

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

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

圖片圖片8bL28資訊網——每日最新資訊28at.com

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

圖片圖片8bL28資訊網——每日最新資訊28at.com

最后配合一個例子看下效果:8bL28資訊網——每日最新資訊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]):8bL28資訊網——每日最新資訊28at.com

圖片圖片8bL28資訊網——每日最新資訊28at.com

5. setTimeout(0) vs requestAnimationFrame

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

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

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

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

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

6. naturalWidth vs width

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

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

圖片圖片8bL28資訊網——每日最新資訊28at.com

7. stopImmediatePropagation vs stopPropagation

stopImmediatePropagation() 方法與 stopPropagation() 方法一樣,可阻止事件冒泡。但是,stopImmediatePropagation() 方法會阻止元素同一事件的其他監聽器。8bL28資訊網——每日最新資訊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 的事件監聽函數不會觸發。8bL28資訊網——每日最新資訊28at.com

8. HTML 字符實體 vs Unicode 字符

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

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

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

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

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

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

標簽:
  • 熱門焦點
Top 日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不
国产综合色在线| 久久免费黄色| 91久久精品一区二区别| 激情婷婷欧美| 在线精品国精品国产尤物884a| 在线精品国产欧美| 91久久中文| 国产午夜亚洲精品理论片色戒| 国产一区二区三区四区老人| 国产在线高清精品| 国产主播精品在线| 亚洲品质自拍| 在线午夜精品自拍| 亚洲高清一区二| 日韩一本二本av| 亚洲精品黄色| 亚洲一区精品电影| 欧美一区二区三区在线观看| 久久精品综合一区| 欧美日韩精品| 国产精品另类一区| 国产精品美女xx| 极品少妇一区二区三区精品视频| 亚洲激情影院| 欧美在线免费看| 免费看亚洲片| 欧美日韩亚洲一区二区| 韩国精品一区二区三区| 亚洲国产成人av在线| 亚洲图中文字幕| 久久久久久久性| 欧美精品乱人伦久久久久久| 国产欧美日韩综合一区在线观看| 在线观看91精品国产麻豆| 国产精品99久久久久久有的能看| 亚洲伦理自拍| 欧美资源在线| 欧美精品国产精品日韩精品| 国产日韩欧美一二三区| 91久久亚洲| 亚洲欧美在线网| 欧美日韩一区二区三区| 国产一区二区三区在线观看视频| 最新亚洲电影| 久久久久久久尹人综合网亚洲| 欧美日韩一区二区高清| 亚洲国产精品视频| 午夜精彩国产免费不卡不顿大片| 免费久久99精品国产自| 国产视频一区二区在线观看| 亚洲精品乱码| 久久久久久自在自线| 国产精品视频精品| 亚洲精品在线一区二区| 裸体女人亚洲精品一区| 国产精品男gay被猛男狂揉视频| 亚洲第一视频| 久久精品视频在线| 国产精品国产三级欧美二区 | 国产精品红桃| 亚洲大胆av| 久久精品国产清高在天天线| 欧美日韩免费网站| 国产欧美日韩三区| 亚洲欧美日本精品| 欧美日本成人| 一区二区视频欧美| 欧美一区二区在线看| 欧美日韩在线第一页| 99日韩精品| 欧美大秀在线观看| 在线观看日韩国产| 久久精品综合网| 国产精品一区2区| 在线看不卡av| 亚洲国产日韩在线一区模特| 久久久国产午夜精品| 国产女人精品视频| 美女免费视频一区| 亚洲美女啪啪| 老司机一区二区| 一色屋精品视频免费看| 久久成人免费电影| 国产伦精品一区二区三区在线观看 | 久久精品国产91精品亚洲| 国产亚洲福利社区一区| 午夜亚洲激情| 欧美日韩精品免费看| 亚洲美女中文字幕| 欧美精品一区二区三区视频| 亚洲国产成人精品久久| 美女免费视频一区| 1024日韩| 欧美成人蜜桃| 亚洲国产成人精品久久久国产成人一区 | 欧美精品在线视频观看| 国产日韩精品一区观看| 香蕉尹人综合在线观看| 欧美一区二区三区四区在线 | 精品1区2区3区4区| 久久男人资源视频| 影音先锋日韩资源| 蜜桃av噜噜一区二区三区| 在线日韩欧美视频| 欧美国产日韩一区二区| 亚洲精品影视| 欧美日韩亚洲另类| 亚洲午夜av在线| 欧美日韩国产小视频| 中文国产一区| 国产精品第十页| 亚洲一区免费视频| 国产欧美在线看| 亚洲欧美日本另类| 国产亚洲va综合人人澡精品| 欧美综合国产| 亚洲第一黄色| 欧美欧美在线| 一本色道久久综合亚洲精品高清| 欧美三级在线视频| 午夜精品久久久久影视| 国产在线视频不卡二| 蜜臀99久久精品久久久久久软件 | 欧美一级视频免费在线观看| 国产日韩一区欧美| 久久大逼视频| 在线观看日韩www视频免费| 欧美www在线| 亚洲深夜福利| 国产真实久久| 裸体一区二区| 亚洲一区视频在线| 国产日韩在线不卡| 欧美国产一区二区在线观看| 一区二区日韩| 国产精品高清免费在线观看| 欧美一区二区三区精品| 亚洲国产精品一区二区www在线| 欧美日韩91| 亚洲欧美视频一区| 韩国女主播一区二区三区| 欧美日本韩国一区| 小嫩嫩精品导航| 亚洲精品一区久久久久久| 国产精品卡一卡二卡三| 久久久久88色偷偷免费| 亚洲欧洲另类国产综合| 国产精品国产三级国产普通话99 | 亚洲国产精品99久久久久久久久| 欧美日韩一二三区| 亚洲精品一区二区三区99| 久久综合亚州| 亚洲网址在线| 一区三区视频| 欧美日韩亚洲一区二区三区四区| 久久精品99久久香蕉国产色戒| 91久久久精品| 欧美午夜影院| 久久久亚洲高清| 99热这里只有成人精品国产| 国产免费观看久久| 欧美岛国激情| 欧美影院成年免费版| 在线亚洲电影| 136国产福利精品导航| 国产欧美日韩精品专区| 欧美激情在线有限公司| 久久只有精品| 香蕉久久国产| 尤物yw午夜国产精品视频明星| 国产精品美女一区二区| 欧美成熟视频| 久久综合九色欧美综合狠狠| 亚洲字幕在线观看| 国内精品视频在线观看| 欧美色图五月天| 美玉足脚交一区二区三区图片| 亚洲欧美制服另类日韩| 亚洲另类在线视频| 国产麻豆午夜三级精品| 国产精品v亚洲精品v日韩精品| 免费日韩av| 久久中文久久字幕| 亚洲在线观看免费视频| 制服丝袜亚洲播放| 国产一区二区三区久久悠悠色av| 欧美日韩亚洲高清一区二区| 欧美精品免费视频| 美女国产一区| 蜜桃伊人久久| 久久午夜电影| 久久久久国产精品厨房| 亚洲欧美激情一区| 日韩亚洲一区二区| 伊人久久大香线蕉av超碰演员| 国产精品午夜在线观看| 国产精品免费视频xxxx| 欧美日韩一区二区三区四区五区| 欧美激情亚洲国产| 麻豆精品在线视频| 久久青草久久| 久久免费精品视频| 久久精品国产亚洲aⅴ| 香蕉成人伊视频在线观看|