前端开发15个实用冷知识,知道一半就算老司机

5 阅读3分钟

“这个样式我调了一上午!”“早知道有这个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前后端分离架构,内置大量成熟前端组件、表单引擎、流程设计器,能一键生成可直接二次开发的前端源码,把上面这些冷知识对应的常用场景都封装成可视化配置,不用反复手写基础代码,专注业务逻辑就行,复杂项目也能快速交付。

平时多积累一点小技巧,再配合高效工具,开发效率直接翻倍。