每个 JavaScript 函数都是一个 Function 对象:(function () {}).constructor === Function 返回 true。
对象类型在内存中存储的是引用和值。所以克隆一个对象存在两种方式:一种是只改变引用在内存中的地址,不改变值的存储空间,叫做浅克隆;一种是改变引用在内存中的地址,并在内存中开辟一个新的区域来存放值,叫做深克隆。
结构化克隆是由 HTML5 规范定义的用于复制复杂 JavaScript 对象的算法,例如 structuredClone() 函数的调用,Workers 的 postMessage() 方法或使用 IndexedDB 存储对象时在内部的调用。
如果做一些简单的功能,油猴脚本就可以做到;要做一些复杂的带有界面的功能,就需要 Chrome 扩展来做了。
requestAnimationFrame 是由浏览器专门为动画提供的API,用法类似于 setTimeout,但是不需要设置时间间隔。
Chrome 96 开始,当你想查看网络请求中的 Request Payload 和 Form Data 信息时,可以使用网络面板里面的 Payload(载荷)边栏。
mouseenter mouseleave 不会冒泡;而 mouseover mouseout 会冒泡,即从自身元素和子元素上之间移动时也会触发。
在 Windows 上使用符号链接至少可以说是有问题的,所以 pnpm 在 Windows 上使用连接点链接来代替符号链接。
Fetch 是一个用来获取网络资源的 API,与 XMLHttpRequest 功能基本相同,但 Fetch 使用 Promise 处理响应,而不是回调函数。
JavaScript 为什么是单线程?因为 JavaScript 是可操纵 DOM 的,如果两个线程同时操作 DOM,那浏览器就无法保证 DOM 数据的一致性了。
HTML 5.2 推出了一个新的原生模态对话框元素 dialog。dialog 可以通过 showModal 方法显示和 ::backdrop 伪元素自定义遮罩层(mask)样式。
Intersection Observer API 用于检测目标元素与祖先元素或 viewport 相交情况变化,它可以自动观察元素是否可见,可见(visible)的本质是,目标元素与视口产生一个交叉区,所以这个 API 叫做交叉观察器。
CORS(Cross-Origin Resource Sharing,跨域资源共享)是一种基于 HTTP 头的机制,通过新增一组 HTTP 头,来决定网页如何处理跨域请求。