一、前端都有哪些技术
1)基础三层
- HTML:页面结构,标签搭建页面骨架
- CSS:页面样式,布局、颜色、动画;衍生:CSS3、SCSS/Sass、Less、Tailwind CSS
- JavaScript:页面交互逻辑;ES6 + 语法
2)框架类
- Vue2 / Vue3、React、Angular;小程序 uni‑app、Taro
3)构建工具
Vite、Webpack、Rollup、esbuild
4)Node 周边
Node.js、npm/yarn/pnpm;Express、Koa
5)HTTP 与浏览器
AJAX、Fetch、Axios;跨域、浏览器缓存、本地存储
6)UI 组件库
Vue:Element‑Plus、Ant Design Vue;React:Ant Design
7)其他
TypeScript(JS 类型增强)、ECharts 图表、WebGL、工程化、性能优化
二、本地存储(localStorage /sessionStorage/cookie / IndexedDB)优劣势
| 存储 | 大小 | 生命周期 | 是否随 http 请求发送 | 特点 |
|---|---|---|---|---|
| cookie | 4KB | 可设置过期时间 | ✅每次请求自动带上 | 兼容老浏览器,存储量很小 |
| localStorage | 5MB | 永久,手动删除 | ❌不参与 http 请求 | 持久化本地存储 |
| sessionStorage | 5MB | 页面会话关闭即销毁 | ❌ | 标签页隔离,关闭页面丢失 |
| IndexedDB | 几十 MB 以上 | 持久化 | ❌ | 浏览器数据库,存大量二进制 / 对象 |
localStorage
✅优点:容量大,简单 API,持久保存,不占请求头 ❌缺点:仅字符串,不能存对象;同源限制;同步 API,大数据会阻塞主线程;不能存敏感信息
sessionStorage
✅优点:隔离不同标签页;关闭页面自动清空,安全;简单 API ❌缺点:关闭标签数据丢失;只能存字符串;同源限制
Cookie
✅优点:服务端可以读写,自动带给后端,兼容 IE ❌缺点:容量极小 4KB;每次 http 请求携带,增加流量;容易 XSS 窃取
IndexedDB
✅优点:大容量,可以存对象、二进制;异步不阻塞页面 ❌缺点:API 复杂,上手繁琐
总结:简单少量数据用 localStorage;会话临时数据 sessionStorage;需要后端读取用 cookie;大量数据用 IndexedDB。
三、Node.js 的优势
- JS 全栈能力:一套 JavaScript,前端写页面,后端写接口,不用切换语言。
- 非阻塞 IO(事件循环):处理大量网络请求性能好,适合 IO 密集型(文件读写、接口转发)。
- npm 生态:世界最大开源包管理器,海量第三方库。
- 前端工程化基础:Webpack/Vite、TS 编译、ESLint、打包构建全部依赖 Node。
- 轻量部署:写接口简单,不需要笨重容器;适合做中间层、代理、脚本。
⚠️缺点:不适合 CPU 密集型计算,单线程,大量计算会阻塞事件循环。
四、Vue 生命周期(Vue2 / Vue3)
生命周期:组件从创建 → 挂载 → 更新 → 销毁的各个钩子函数
Vue2
beforeCreate:实例刚创建,data/methods 还不能访问created:实例创建完成,data、methods 可以访问,DOM 还未生成,不能操作 DOM;常用请求接口beforeMount:挂载前,模板编译完成,虚拟 DOM 生成mounted:组件挂载完成,真实 DOM 已经渲染;可以操作 DOM、获取 DOM 节点beforeUpdate:数据更新,DOM 还没更新updated:数据更新完成,DOM 已经更新完毕beforeDestroy:组件销毁前,定时器、事件监听在这里清除destroyed:组件销毁完成
Vue3 setup 语法糖
组合式 API:onBeforeMount、onMounted、onBeforeUpdate、onUpdated、onBeforeUnmount、onUnmounted
高频考点:
created拿不到 DOM;mounted才能拿到 DOM;销毁前清除定时器防止内存泄漏。
五、Vue 如何适配 IE
Vue3不再支持 IE,Vue2 最高支持 IE11
- 使用Vue2,不要 Vue3
- 安装依赖:
babel‑polyfill或者core‑js,转译 ES6 + 语法给 IE 识别 - webpack 配置,把
node_modules里面部分包加入 babel 转译 - 避免使用 ES6+API,
Promise、Array.includesIE 不支持,需要垫片 polyfill - UI 库:Element‑UI 支持 IE11;Element‑Plus 不支持 IE
- 部分浏览器 API 兼容,例如
fetch替换为 axios;不使用可选链?. - index.html 加入 IE 兼容 meta 标签
<meta http‑equiv="X‑UA‑Compatible" content="IE=edge">现实业务:现在大多放弃 IE;如果必须兼容只能选 Vue2。
六、同时支持微信 H5、PC 端、移动端方案
方案 1:响应式布局(一套代码多端)
- CSS 媒体查询
@media;使用 rem/vw/vh 相对单位 - UI 库:Element‑Plus(PC)+ Vant(移动端);或者使用
Naive‑ui、Uni‑app - 判断 UA,区分环境,做条件渲染:
// 判断是否微信环境 const isWechat = /MicroMessenger/i.test(navigator.userAgent) // 判断移动端 const isMobile = /Android|iPhone|iPad/i.test(navigator.userAgent)- 微信 JS‑SDK:微信环境单独配置签名,调用微信能力(分享、拍照)
方案 2:两套页面(PC 一套,移动端一套)
- 路由区分
/pc、/h5,根据设备 UA 自动跳转。
关键点
- 微信 H5 独有逻辑:微信登录、微信分享,只在微信浏览器执行;PC 端屏蔽。
- 样式:PC 使用 px;移动端使用 vw/rem;禁止固定 px 硬写死。
- 点击事件:移动端 300ms 延迟,加 meta:
<meta name="viewport" content="width=device‑width, initial‑scale=1.0">七、Vue 加载速度优化
📦打包构建优化
- 路由懒加载:组件动态导入,只加载当前页面组件
const Home = () => import('./views/Home.vue')- 第三方库按需引入,不要全量导入 UI 库
- 大库做 CDN 外部引入,webpack 排除
externals,不打包进 bundle - 开启 vite/webpack 生产压缩;关闭 source‑map
🖼️资源优化
- 图片压缩;使用 webp 格式;图片懒加载;小图转 base64
- 字体文件压缩
🚀运行时优化
- v‑if 和 v‑show 合理选择;避免不必要组件渲染
- 列表渲染加
key;大数据列表使用虚拟滚动 - 本地缓存接口数据,减少重复请求
- 开启浏览器缓存;使用 http 缓存策略
首屏体验
- 首页骨架屏;loading 加载提示;SSR/SSG(Vue SSR / Nuxt)
八、Vue 常见指令
| 指令 | 作用 |
|---|---|
v‑text | 设置元素文本内容 |
v‑html | 渲染 html 字符串(注意 XSS 风险) |
v‑if | 条件渲染,销毁 / 重建 DOM |
v‑show | 显示隐藏,css display 控制,DOM 还在 |
v‑for | 循环渲染列表,必须绑定 key |
v‑bind/: | 绑定属性:class:src |
v‑on/@ | 绑定事件@click |
v‑model | 表单双向绑定 |
v‑once | 只渲染一次,后续不再更新 |
重点区分:
v‑if销毁 DOM;v‑show只是隐藏 DOM。高频考点。
九、如何循环读取 JSON
1. JSON 字符串先转 JS 对象
const jsonStr = '{"a":1,"b":2}' const obj = JSON.parse(jsonStr) // json字符串 → js对象2. 对象循环
// 方式1 for in for(let key in obj){ console.log(key, obj[key]) } // 方式2 Object.keys Object.keys(obj).forEach(key=>{ console.log(key, obj[key]) }) // Object.values 获取值数组 Object.values(obj).forEach(val=>{})3. JSON 数组循环
const jsonArr = '[{"name":"张三"},{"name":"李四"}]' const arr = JSON.parse(jsonArr) arr.forEach(item=>{ console.log(item.name) })Vue 模板中循环 json 对象
<div v‑for="(value, key) in myObj" :key="key"> {{key}} : {{value}} </div>十、JSON 定义字符串、对象
JSON 是字符串格式,不是 JS 对象。
- JSON:只能用双引号,不能写注释,key 必须双引号;不支持函数、undefined。
✅ JSON 对象字符串
{ "username":"张三", "age":18 }js 代码写法:
// json字符串 const jsonObjStr = '{"username":"张三","age":18}' // JS普通对象(不是JSON!) const jsObj = { username:"张三", age:18 }✅ JSON 数组字符串
const jsonArrStr = '[{"id":1},{"id":2}]'转换 API
JSON.parse(jsonStr) // JSON字符串 → JS对象 JSON.stringify(jsObj) // JS对象 → JSON字符串易错点:localStorage 只能存字符串,存对象必须
JSON.stringify;读取JSON.parse还原。