16 个前端冷知识
abbrlink: ‘0’
“这个Bug我调了俩小时!” “早知道有这个属性就好了……”
这种对话,在程序员之间可以说是太常见了。
很多问题,一旦知道诀窍,三五分钟就能解决;可如果不知道,很可能就需要耗上大半天的时间去处理。
于是我就决定,把这些平时可能没人专门讲,但又特别实用的前端冷知识整理了一下,保准你看完有收获。
1. CSS中的:hover伪类也可以用于非链接元素
很多人以为:hover只能用在a标签上,其实不然!任何元素都可以使用:hover伪类。
1 | /* 不只是链接,div也可以有悬停效果 */ |
实用场景:为表格行、卡片组件等添加悬停效果,提升用户体验。
2. 箭头函数没有自己的this绑定
这是ES6箭头函数的一个重要特性,但经常被忽略:
1 | const obj = { |
原理分析:箭头函数不绑定自己的this,而是继承父级作用域的this值。
3. 快速浮点数转整数
1 | // 这三种方式都可以将浮点数转为整数 |
注意:这些方法只适用于32位整数,大数情况下可能会出现问题。
4. 使用dataset操作自定义数据属性
1 | <div id="user" data-id="123" data-user-name="小明"></div> |
优势:比getAttribute/setAttribute更简洁,且自动进行数据类型转换。
5. 使用navigator.onLine检测网络状态
1 | // 检测用户是否在线 |
应用场景:PWA应用、资源加载优化等。
6. 使用contenteditable使元素可编辑
1 | <div contenteditable="true"> |
实用技巧:可以结合localStorage实现简单的实时预览编辑器。
7. 使用currentScript获取当前执行的script标签
1 | <script> |
应用场景:在脚本中动态加载依赖资源时非常有用。
8. 使用passive优化滚动性能
1 | // 不好的做法(可能阻塞滚动) |
原理:告诉浏览器事件处理函数不会调用preventDefault(),从而提升滚动性能。
9. 使用clamp实现响应式字体大小
1 | .text { |
优势:比媒体查询更简洁,实现真正的流体排版。
10. 使用in操作符检查对象属性
1 | const obj = { name: '小明', age: 20 }; |
与hasOwnProperty的区别:in会检查原型链上的属性,而hasOwnProperty只检查自身属性。
11. 使用Array.from将类数组转为真实数组
1 | // 将NodeList转为数组 |
12. 使用performance API进行性能监控
1 | // 标记开始时间 |
13. 使用structuredClone进行深拷贝
1 | const obj = { name: "小明", hobbies: ["篮球", "游泳"] }; |
优势:比JSON.parse(JSON.stringify(obj))更可靠,可以处理循环引用。
14. 使用CSS的:where和:is简化选择器
1 | /* 传统写法 */ |
优势:代码更简洁,易于维护。
15. 使用requestIdleCallback进行任务调度
1 | function processTask(deadline) { |
应用场景:大数据渲染、复杂计算等需要优化性能的场景。
16. 你可能不知道的console.log黑科技
最后一个,你可能不知道console.log还有这些用法:
1 | // 1. 使用CSS样式 |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 小城故事!
评论






