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

哈哈!来自stackoverflow认证!

言归正传,今天来一些,关于Javascript奇奇怪怪的东西!可能大部分前端佬没有注意,但有些东西用着还挺爽的!
1、FinalizationRegistry
概述
这个是2021年引入的,作用就是当某一个对象被监控后,如果这个对象被垃圾回收机制清理后,就会触发。
这个呢,用来手动释放一些知道不再使用的对象的内存,就很棒呐!或者反过来使用,用来监控某一个对象是否被垃圾回收。
具体使用办法,哥几个还是去[MDN](MDN Web Docs)上找找。不举例了哈,后面也是。
兼容性

2、MutationObserver
概述
曾经的前端佬你,有没有想过做一件事情。比如做一个埋点的系统,怎么能埋一个异步的广告图片的点击量?
如果有这个需求的话,曾经的前端佬你,是不是用的就是setInterval?
当然了,还有更牛逼的前端佬用的是Mutation Events。
现在看到这里的前端佬你,可以自豪的说,用这个API就可以了。

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

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节点等,还不能支持。
但他有一个很棒的功能,转移对象。

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

4、IntersectionObserver
概述
这玩意,也是绝了。
通俗点来说,是可以用来监控一个元素是否进入/离开可视区域。比如懒加载那功能,图片是否进入可视区域就可以用这个实现。
但远远不止这样,我们可以看看MDN上咋解释:
IntersectionObserver 接口(从属于 Intersection Observer API)提供了一种异步观察目标元素与其祖先元素或顶级文档视口(viewport)交叉状态的方法。其祖先元素或视口被称为根(root)。
当一个 IntersectionObserver 对象被创建时,其被配置为监听根中一段给定比例的可见区域。一旦 IntersectionObserver 被创建,则无法更改其配置,所以一个给定的观察者对象只能用来监听可见区域的特定变化值;然而,你可以在同一个观察者对象中配置监听多个目标元素。
懒加载之类的优化就不说了,比如埋点中,统计某一个广告的曝光时间,是不是用这个也挺爽的?
兼容性

5、BroadcastChannel
概述
这个呢?我们回忆一下之前有一个特效,"量子纠缠"的那个效果。

炫酷吧!
像这样的,各个tab的交互数据,就是通过BroadcastChannel来完成的。
BroadcastChannel的主要功能,就是它允许同源的不同浏览器窗口、标签页、frame 或者 iframe 下的不同文档之间相互通信。
使用场景的话,有待各个前端佬开发了。
兼容性

差不多这样吧,写的很多了。
如果这种有前端佬希望的话,下次再整整别的。