-
本文讲解React中权限检查函数无法返回true/false的常见原因及解决方案,重点解决因useState初始化为对象而非数组、循环逻辑错误导致的返回值异常问题。
-
事件委托通过事件冒泡将监听器绑定到父元素,减少内存占用并提升性能。例如,为包含100个列表项的<ul>绑定事件时,传统方式需100个监听器,而事件委托只需在<ul>上绑定一次即可处理所有点击。动态添加的子元素无需重新绑定事件,触发时会自然冒泡至父级已存在的监听器,适用于聊天记录、商品列表等频繁更新场景。通过data-action等属性可集中管理按钮行为,简化代码维护。示例中为表格绑定点击事件,根据目标元素的dataset判断执行编辑或删除逻辑。事件委托虽非万能,但在处理大量或动态元
-
去除HTML列表默认前导符号的方法有五种:一、用list-style:none;二、用list-style-type:none;三、用list-style:noneinside/outside清除图片和位置;四、用display:block/inline-block使li脱离列表渲染;五、用li::marker{content:"";}伪元素清除标记。
-
JavaScript垃圾回收基于可达性,非手动delete/null;内存泄漏主因是本该断开的引用仍存在。常见于未清理定时器、事件监听器或闭包持有大对象。定位用Chrome内存快照对比Retainers链路。
-
TDD通过“红-绿-重构”循环提升JavaScript代码质量:先写失败测试,再编写通过代码,最后重构并验证。配合Jest、Vitest等工具可高效实现自动化测试,确保代码稳定可靠。
-
:empty选择器用于匹配不含任何子节点的元素,包括文本、空格、标签或注释。例如,仅<divclass="box"></div>会被.box:empty选中,其余含空格、子标签或文字的均不匹配。需注意换行、缩进和注释也会导致元素非空,常用于隐藏未填充容器或表单验证等场景。
-
JavaScript优化动画的核心在于理解事件循环并使用requestAnimationFrame(rAF)。①动画卡顿的根源是主线程被阻塞,导致浏览器无法及时重绘;②事件循环分为宏任务和微任务,微任务优先级更高;③rAF能与浏览器重绘同步,确保动画在下一帧前执行;④将视觉更新放入rAF回调,非视觉任务拆分或移至WebWorkers;⑤避免使用setTimeout或setInterval,因其执行时机不确定,易导致掉帧。通过合理调度任务,可实现流畅动画。
-
原生CSS响应式适配工作量大,因需手动写@media断点、测多设备参数、处理老浏览器flexfallback及iOSSafariviewportbug;Tailwind通过sm:、md:等前缀在构建时生成真实CSS规则,实现“声明即适配”;Bootstrap5以container-fluid和g-3等现代工具类提供开箱即用的栅格与间距方案;但字体、图片srcset、表单样式等细节仍需手动处理。
-
gridgap仅控制网格项间间隙,不影响容器边缘;需额外设置padding实现边缘留白,不可用margin替代。
-
addEventListener的三个选项capture、once、passive可精确控制事件行为:capture指定捕获阶段触发,once确保回调仅执行一次,passive提升滚动性能;合理使用可优化代码性能与维护性。
-
子元素margin会让父元素“被撑开”是因margin塌陷:子元素垂直外边距与父元素边界合并;触发BFC(如display:flow-root)可彻底解决,语义清晰且无副作用。
-
最稳定方案是用Puppeteer截取完整滚动页面PNG再转PDF:先page.screenshot({fullPage:true}),再用img2pdf转单页PDF;若直接page.pdf(),需设大height并禁用页眉页脚。
-
实现选项卡功能有五种方法:一、原生HTML+CSS+JavaScript;二、Bootstrap5插件;三、HTMLDetails/Summary元素;四、Tabby轻量JS库;五、Vue.js动态绑定。
-
__proto__指向实例的原型对象,prototype是函数独有的属性;实例方法调用依赖原型链委托查找,如p.sayHi()会依次查找p→Person.prototype→Object.prototype。
-
Object.assign会复制可枚举属性和Symbol键并执行getter,而扩展运算符仅复制字符串键的可枚举属性且保留getter/setter不执行,因此在处理访问器或Symbol时行为不同。