普通视图

发现新文章,点击刷新页面。
今天 — 2025年9月6日首页

老乡,别走!Javascript隐藏功能你知道吗?

作者 大怪v
2025年9月5日 23:05

先给前端佬透露,Javascript是最好的语言!有数据为证!

image.png

哈哈!来自stackoverflow认证!

u=1942032570,3763408276&fm=26&gp=0.gif

言归正传,今天来一些,关于Javascript奇奇怪怪的东西!可能大部分前端佬没有注意,但有些东西用着还挺爽的!

1、FinalizationRegistry

概述

这个是2021年引入的,作用就是当某一个对象被监控后,如果这个对象被垃圾回收机制清理后,就会触发。

这个呢,用来手动释放一些知道不再使用的对象的内存,就很棒呐!或者反过来使用,用来监控某一个对象是否被垃圾回收。

具体使用办法,哥几个还是去[MDN](MDN Web Docs)上找找。不举例了哈,后面也是。

兼容性

image.png

2、MutationObserver

概述

曾经的前端佬你,有没有想过做一件事情。比如做一个埋点的系统,怎么能埋一个异步的广告图片的点击量?

如果有这个需求的话,曾经的前端佬你,是不是用的就是setInterval?

当然了,还有更牛逼的前端佬用的是Mutation Events。

现在看到这里的前端佬你,可以自豪的说,用这个API就可以了。

6.gif

它是在DOM之上实现的,能完美的监控到DOM树的增删改!!!

兼容性

image.png

3、structuredClone

概述

深度复制一个新的API,它能拷贝的范围很大,几乎涵盖常用的内置对象,如下:

  • 基本类型(number, string, boolean, null, undefined, BigInt, Symbol)
  • 普通对象、数组
  • Date
  • RegExp
  • Map / Set
  • ArrayBuffer, TypedArray, DataView Blob, File, FileList
  • ImageBitmap, OffscreenCanvas

可惜了,几乎俩字几乎要跟它一辈子。比如Function、Error、DOM节点等,还不能支持。

但他有一个很棒的功能,转移对象。

image.png

那么使用场景是啥呢?比如一些对象,复制代价很大。比如你定义的vue组件中,有些props数据中的对象中包含vue组件的。那子组件,如果不想造成父组件一改变数据就影响到子组件的数据,就会采取复制一份。这个时候就可以用到这个转移对象了。

转移之后,原有的对象会被清空。

兼容性

image.png

4、IntersectionObserver

概述

这玩意,也是绝了。

通俗点来说,是可以用来监控一个元素是否进入/离开可视区域。比如懒加载那功能,图片是否进入可视区域就可以用这个实现。

但远远不止这样,我们可以看看MDN上咋解释:

IntersectionObserver 接口(从属于 Intersection Observer API)提供了一种异步观察目标元素与其祖先元素或顶级文档视口(viewport)交叉状态的方法。其祖先元素或视口被称为根(root)。

当一个 IntersectionObserver 对象被创建时,其被配置为监听根中一段给定比例的可见区域。一旦 IntersectionObserver 被创建,则无法更改其配置,所以一个给定的观察者对象只能用来监听可见区域的特定变化值;然而,你可以在同一个观察者对象中配置监听多个目标元素。

懒加载之类的优化就不说了,比如埋点中,统计某一个广告的曝光时间,是不是用这个也挺爽的?

兼容性

image.png

5、BroadcastChannel

概述

这个呢?我们回忆一下之前有一个特效,“量子纠缠”的那个效果。

f409b3475d0ae5086a4dfa8df708192f.gif

炫酷吧!

像这样的,各个tab的交互数据,就是通过BroadcastChannel来完成的。

BroadcastChannel的主要功能,就是它允许同源的不同浏览器窗口、标签页、frame 或者 iframe 下的不同文档之间相互通信。

使用场景的话,有待各个前端佬开发了。

兼容性

image.png

差不多这样吧,写的很多了。

如果这种有前端佬希望的话,下次再整整别的。

❌
❌