当前位置:首页 > 科技  > 软件

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

来源: 责编: 时间:2024-06-05 17:45:44 273观看
导读前端知识中有很多相近的概念或 API,相信不少人在开发中有注意到这些相近的概念或 API,但是有时不会深入去了解异同,只要某个 API 能满足开发需求即可。本文将介绍一些相近的概念和 API,让你能更清晰地了解它们的异同,在使

前端知识中有很多相近的概念或 API,相信不少人在开发中有注意到这些相近的概念或 API,但是有时不会深入去了解异同,只要某个 API 能满足开发需求即可。FXW28资讯网——每日最新资讯28at.com

本文将介绍一些相近的概念和 API,让你能更清晰地了解它们的异同,在使用时更游刃有余。FXW28资讯网——每日最新资讯28at.com

1. cookie vs localStorage vs sessionStorage

前端开发中,这三个本地存储方案可以说是很常见的,用一张图说明下它们的区别:FXW28资讯网——每日最新资讯28at.com

图片图片FXW28资讯网——每日最新资讯28at.com

2. querySelectorAll vs getElementsByTagName

querySelectorAll 可以根据传入的 CSS 选择器查找 HTML 元素,使用上比 getElementsByTagName 更灵活。FXW28资讯网——每日最新资讯28at.com

它们之间的不同点在于:querySelectorAll 返回的是一个静态的 NodeList,而 getElementsByTagName 返回的是动态的。FXW28资讯网——每日最新资讯28at.com

来看下面这个示例:FXW28资讯网——每日最新资讯28at.com

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

接下来使用两个方法获取 li 元素类数组,然后再动态插入一个 li,最后查看两个类数组的长度。FXW28资讯网——每日最新资讯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。FXW28资讯网——每日最新资讯28at.com

常用的获取元素方法中getElementsByClassName 方法、element.childNodes 和 element.children 返回的也是动态 NodeList。FXW28资讯网——每日最新资讯28at.com

3. children vs childNodes

children 和 childNodes 都可以用来获取元素的子节点,不同的是 children 只会获取 HTML 元素节点,而 childNodes 会获取到非 HTML 元素节点,包括文本、注释节点等。FXW28资讯网——每日最新资讯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

宏任务和微任务概念也经常在前端中出现,与之相关的就是事件循环机制。事件循环机制是必须掌握的,宏任务和微任务也可以了解下,实际开发中碰到相关问题能反应过来是宏任务和微任务的不同即可。FXW28资讯网——每日最新资讯28at.com

宏任务包括:FXW28资讯网——每日最新资讯28at.com

  • setTimeout and  setInterval 的回调
  • DOM 操作
  • I/O 操作 (Node 中读写文件)
  • requestAnimationFrame

微任务包括:FXW28资讯网——每日最新资讯28at.com

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

事件循环机制如下图:FXW28资讯网——每日最新资讯28at.com

图片图片FXW28资讯网——每日最新资讯28at.com

宏任务微任务执行顺序如下图:FXW28资讯网——每日最新资讯28at.com

图片图片FXW28资讯网——每日最新资讯28at.com

最后配合一个例子看下效果:FXW28资讯网——每日最新资讯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]):FXW28资讯网——每日最新资讯28at.com

图片图片FXW28资讯网——每日最新资讯28at.com

5. setTimeout(0) vs requestAnimationFrame

setTimeout(0) 和 requestAnimationFrame 都能把代码延迟到下一个动画帧运行,它们的不同在于:FXW28资讯网——每日最新资讯28at.com

  • setTimeout(0) 将代码推到事件循环的任务队列中,如果任务队列中有大量任务,setTimeout(0) 就不会立即执行。
  • requestAnimationFrame 会在下一次渲染前执行,而不是在事件循环中执行,它能自动与显示器刷新率同步。不过,它只有在浏览器准备好渲染新帧时才会执行,如果标签页处于非激活状态,它就不会运行。

处理动画时,requestAnimationFrame 更合适, 如果你要延迟执行代码的话,可以直接使用 setTimeout(0)。FXW28资讯网——每日最新资讯28at.com

补充一个小点:setTimeout 的语法是  setTimeout(functionRef, delay, param1, param2, /* … ,*/ paramN),除了回调函数和延迟时间,后续参数都会作为回调函数的参数。FXW28资讯网——每日最新资讯28at.com

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

6. naturalWidth vs width

naturalWidth 是元素的自然宽度,它永远不会改变。例如,一张 100px 宽的图片的 naturalWidth 始终是 100px,即使通过 CSS 或 JavaScript 调整图片大小后也不变。FXW28资讯网——每日最新资讯28at.com

而 width 是可以改变的,可以通过 CSS 或 JavaScript 设置。FXW28资讯网——每日最新资讯28at.com

图片图片FXW28资讯网——每日最新资讯28at.com

7. stopImmediatePropagation vs stopPropagation

stopImmediatePropagation() 方法与 stopPropagation() 方法一样,可阻止事件冒泡。但是,stopImmediatePropagation() 方法会阻止元素同一事件的其他监听器。FXW28资讯网——每日最新资讯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 的事件监听函数不会触发。FXW28资讯网——每日最新资讯28at.com

8. HTML 字符实体 vs Unicode 字符

HTML 实体是特殊字符序列,用来表示可能被误认为是 HTML 代码的字符,如小于号 (<) 或双引号 (&)。FXW28资讯网——每日最新资讯28at.com

下面是一些常见的 HTML 实体:FXW28资讯网——每日最新资讯28at.com

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

HTML 字符实体相比 Unicode 字符会更好记些,同时浏览器对 HTML 字符实体支持更好。FXW28资讯网——每日最新资讯28at.com

Unicode 是表示字符或符号的特定代码,它们用于显示标准字符集中可能没有的字符,如非拉丁字母或特殊符号。FXW28资讯网——每日最新资讯28at.com

一些 Unicode 字符示例:FXW28资讯网——每日最新资讯28at.com

标签:
  • 热门焦点
  • Mate60手机壳曝光 致敬自己的经典设计

    8月3日消息,今天下午博主数码闲聊站带来了华为Mate60的第三方手机壳图,可以让我们在真机发布之前看看这款华为全新旗舰的大致轮廓。从曝光的图片看,Mate 60背后摄像头面积依然
  • 红魔电竞平板评测:大屏幕硬实力

    前言:三年的疫情因为要上网课的原因激活了平板市场,如今网课的时代已经过去,大家的生活都恢复到了正轨,这也就意味着,真正考验平板电脑生存的环境来了。也就是面对着这种残酷的
  • 消息称迪士尼要拍真人版《魔发奇缘》:女主可能也找黑人演员

    8月5日消息,迪士尼确实有点忙,忙着将不少动画改成真人版,继《美人鱼》后,真人版《白雪公主》、《魔发奇缘》也在路上了。据外媒消息称,迪士尼将打造真人版
  • 服务存储设计模式:Cache-Aside模式

    Cache-Aside模式一种常用的缓存方式,通常是把数据从主存储加载到KV缓存中,加速后续的访问。在存在重复度的场景,Cache-Aside可以提升服务性能,降低底层存储的压力,缺点是缓存和底
  • JavaScript学习 -AES加密算法

    引言在当今数字化时代,前端应用程序扮演着重要角色,用户的敏感数据经常在前端进行加密和解密操作。然而,这样的操作在网络传输和存储中可能会受到恶意攻击的威胁。为了确保数据
  • 中国家电海外掘金正当时|出海专题

    作者|吴南南编辑|胡展嘉运营|陈佳慧出品|零态LT(ID:LingTai_LT)2023年,出海市场战况空前,中国创业者在海外纷纷摩拳擦掌,以期能够把中国的商业模式、创业理念、战略打法输出海外,他们依
  • 品牌洞察丨服务本地,美团直播成效几何?

    来源:17PR7月11日,美团App首页推荐位出现&ldquo;美团直播&rdquo;的固定入口。在直播聚合页面,外卖&ldquo;神枪手&rdquo;直播间、美团旅行直播间、美团买菜直播间等均已上线,同时
  • 2纳米决战2025

    集微网报道 从三强争霸到四雄逐鹿,2nm的厮杀声已然隐约传来。无论是老牌劲旅台积电、三星,还是誓言重回先进制程领先地位的英特尔,甚至初成立不久的新
  • AMD的AI芯片转单给三星可能性不大 与台积电已合作至2nm制程

    据 DIGITIMES 消息,英伟达 AI GPU 出货逐季飙升,接下来 AMD MI 300 系列将在第 4 季底量产。而半导体业内人士表示,近日传出 AMD 的 AI 芯片将转单给
Top