“这个样式我调了一上午!”“早知道有这个API就好了……”
前端开发里,很多坑都是信息差。知道诀窍,三五分钟搞定;不知道,可能耗上大半天还没头绪。
今天整理了16个冷门但超实用的前端小技巧,平时业务可能不常用,但关键时刻能救命,看完绝对有收获。
1. CSS :hover 不止能作用于链接
别以为:hover只能给<a>用,任何元素都能加。
/* 卡片、表格行都能用 */
.card:hover {
transform: translateY(-4px);
box-shadow: 0 8px 24px rgba(0,0,0,.1);
transition: all .3s;
}
场景:列表、卡片、表格行悬停反馈,提升交互质感。
2. 箭头函数没有自己的 this
这是ES6高频考点,也是实战大坑:
const obj = {
name: "前端开发",
fn() { console.log(this.name); }, // 正常
arrow: () => { console.log(this.name); } // undefined
};
原理:箭头函数不绑定this,继承外层作用域的this。
3. 快速浮点数转整数(位运算骚操作)
一行代码取整,比Math.floor更短:
console.log(~~3.99); // 3
console.log(6.28 | 0); // 6
console.log(9.56 >> 0); // 9
注意:只适用于32位有符号整数,大数慎用。
4. dataset 优雅操作自定义属性
比getAttribute/setAttribute清爽太多:
<div data-user-id="10086" data-user-name="张三"></div>
<script>
const el = document.querySelector('div');
console.log(el.dataset.userId); // 10086
console.log(el.dataset.userName); // 张三
</script>
自动驼峰转换,语义清晰,代码更整洁。
5. navigator.onLine 实时判断网络
做离线应用、PWA必备:
// 立即判断
if (navigator.onLine) { /* 在线 */ }
// 监听网络变化
window.addEventListener('online', () => {
alert('网络恢复啦~');
});
场景:断网提示、失败重连、资源预加载控制。
6. contenteditable 秒变可编辑区域
不用复杂表单,div直接可编辑:
<div contenteditable="true" class="editor">
在这里直接输入内容
</div>
搭配localStorage,能快速做个简易实时预览编辑器。
7. document.currentScript 获取当前脚本
精准拿到正在执行的<script>标签:
<script>
console.log('当前脚本:', document.currentScript.src);
</script>
场景:动态加载CDN资源、脚本自识别路径。
8. passive 大幅优化滚动性能
移动端滚动卡顿?多半是事件阻塞:
// 不推荐(可能阻塞滚动)
document.addEventListener('touchmove', e => {});
// 推荐:告诉浏览器不阻止默认行为
document.addEventListener('touchmove', e => {}, { passive: true });
原理:浏览器提前知道不会调用preventDefault,滚动更丝滑。
9. clamp 一行实现响应式字体
告别繁琐媒体查询,真正流体排版:
.title {
font-size: clamp(14px, 5vw, 28px);
}
字体在14px–28px之间自适应,适配手机/PC。
10. in 操作符检查属性(含原型链)
const obj = { name: "李四" };
console.log('name' in obj); // true
console.log('toString' in obj); // true(来自原型)
和hasOwnProperty区别:in查整条原型链,后者只查自身属性。
11. Array.from 轻松转真实数组
把NodeList、arguments变成标准数组:
// 节点列表转数组
const list = Array.from(document.querySelectorAll('.item'));
// arguments 转数组
function demo() {
const args = Array.from(arguments);
}
之后就能用map/filter/reduce等数组方法。
12. performance API 精准测性能
比console.time更专业:
performance.mark('start');
// 执行逻辑
for(let i=0;i<1e6;i++);
performance.mark('end');
// 计算耗时
performance.measure('耗时', 'start', 'end');
const res = performance.getEntriesByName('耗时')[0];
console.log(res.duration + 'ms');
做性能优化、接口/渲染耗时统计必备。
13. structuredClone 靠谱深拷贝
比JSON.parse(JSON.stringify)强太多:
const obj = {
user: '张三',
info: { age: 25 },
// 支持循环引用!
};
obj.self = obj;
const copy = structuredClone(obj);
支持循环引用、Date/RegExp/Set/Map,JSON大法搞不定的它都行。
14. :is / :where 简化CSS选择器
代码少写一半,维护更轻松:
/* 传统写法 */
.content h1, .content h2, .content h3 { margin: 0; }
/* 简化 */
.content :is(h1, h2, h3) { margin: 0; }
:where权重更低,适合全局样式覆盖。
15. requestIdleCallback 空闲执行任务
不阻塞主线程,后台悄悄干活:
function doTask(deadline) {
while (deadline.timeRemaining() > 0 && tasks.length) {
doOneTask(tasks.shift());
}
if (tasks.length) requestIdleCallback(doTask);
}
requestIdleCallback(doTask);
场景:大数据渲染、埋点上报、复杂计算、日志处理。
写在最后
这些冷知识,平时写业务可能80%时间用不上,但有个印象很重要。
真碰到问题时,你会突然一拍脑袋:哦,好像有个属性/API就是干这个的!
前端开发就是这样,很多重复劳动、繁琐样式、性能问题,靠一个小技巧就能解决。
如果你觉得手写这些基础配置、组件、工具方法还是麻烦,其实现在很多企业级项目都在用JNPF快速开发平台来提效。它基于Vue3+SpringBoot前后端分离架构,内置大量成熟前端组件、表单引擎、流程设计器,能一键生成可直接二次开发的前端源码,把上面这些冷知识对应的常用场景都封装成可视化配置,不用反复手写基础代码,专注业务逻辑就行,复杂项目也能快速交付。
平时多积累一点小技巧,再配合高效工具,开发效率直接翻倍。