1. JavaScript 和 TypeScript 有什么区别?优缺点是什么?
- 区别:
- JS 是解释型、弱类型语言;TS 是 JS 的超集,增加了静态类型检查。
- TS 需要编译成 JS 才能运行。
- TS 支持接口、泛型、枚举等更完善的类型系统。
- 优点(TS 相对 JS) :
- 类型检查,减少运行时错误。
- 更好的 IDE 支持和代码提示。
- 更利于大型项目维护。
- 缺点:
- 学习成本更高。
- 需要编译,增加构建流程。
- 项目初期开发会比 JS 慢一些。
2. JS 中 var、let、const 的区别?
var:函数作用域,存在变量提升,可重复声明。
let:块级作用域,不存在变量提升,不可重复声明。
const:块级作用域,声明必须赋值,引用不可变,但对象属性可变。
3. JS 中闭包是什么?实际开发中有哪些应用场景?
- 闭包定义:函数嵌套函数,内部函数可以访问外部函数作用域中的变量。
- 应用场景:
- 封装私有变量(如计数器)。
- 延迟执行(事件回调)。
- 模块化开发,避免全局污染。
4. GET 和 POST 请求的区别是什么?在数据量、安全性、使用场景方面有什么不同?
- 数据量:GET 有长度限制(URL 约 2K–8K),POST 理论上无限。
- 安全性:GET 参数明文在 URL 里,敏感信息不安全;POST 放在请求体中,相对安全。
- 使用场景:
- GET:查询、无副作用操作。
- POST:新增、修改、删除数据等操作。
5. Cookie 和 Session 的区别是什么?你们项目中是如何使用的?
- Cookie:存储在客户端,容量小,安全性差,常用于存储 token、登录状态。
- Session:存储在服务端,依赖 Session ID,安全性更高。
- 项目中应用:
- 小程序/前端项目中一般通过 Cookie/LocalStorage 保存 token;
- 后端通过 Session 管理用户登录状态。
6. 数组和集合有什么区别?
- 数组:有序、可重复、通过索引访问。
- 集合(Set) :无序、不重复,常用于去重和快速查找元素。
const array = [1, 2, 2, 3, 4, 4];
const set = new Set([1, 2, 2, 3, 4, 4]);
console.log(array);
console.log(set);
7. 你对 Vue3 的整体结构和运行机制了解多少?
- 整体结构:
- 响应式系统(Reactivity)。
- 组件系统(Component)。
- 渲染器(Renderer)——虚拟 DOM -> 真 DOM。
- 运行机制:
- 数据变化 -> 响应式追踪依赖 -> 触发视图更新 -> 渲染函数更新虚拟 DOM -> 更新真实 DOM。
8. Vue3 的核心设计理念是什么?它的响应式原理是如何实现的?
- 核心设计理念:
- “一切皆为函数”(组合式 API)。
- 高度模块化,按需引入。
- 响应式原理:
- 基于
Proxy 实现数据劫持和依赖收集。
- 访问属性时收集依赖(
track),修改属性时触发更新(trigger)。
- 响应式原理代码:
function reactive(target) {
return new Proxy(target, {
get(obj, key) {
track(obj, key);
return obj[key];
},
set(obj, key, value) {
obj[key] = value;
trigger(obj, key);
return true;
}
});
}
const state = reactive({ count: 0 });
effect(() => {
console.log('Count:', state.count);
});
state.count++;
9. 在做小程序开发时,如何适配不同分辨率和机型?
- rpx 单位系统 - 微信小程序自适应单位
- Flex 布局 - 弹性盒模型
- 媒体查询 - 针对不同屏幕尺寸
- 设计稿基准 - 以 750px 宽为基准
.container {
width: 750rpx;
padding: 20rpx;
}
@media screen and (max-width: 320px) {
.container {
font-size: 24rpx;
}
}
10. 小程序里为什么常用 rpx 单位?与普通网页里的 px/rem/em 有什么不同?
- rpx:相对单位,基于屏幕宽度自动适配,750rpx = 屏幕宽度。
- px:绝对像素,不适配。
- rem:相对根元素的字体大小。
- em:相对父元素字体大小。
- 小程序推荐用
rpx,因为能自动适配不同机型。
11. UniApp 的优缺点是什么?
- 优点:
- 一套代码多端运行(H5、小程序、App)。
- 丰富的组件库和插件市场。
- 缺点:
- 性能略逊于原生开发。
- 跨端兼容问题,需要单独适配。
12. 你在小程序项目中,支付功能是如何实现的?
- 前端调用微信支付 API,传入订单号。
- 后端调用微信统一下单接口,生成预支付交易单。
- 前端调起支付,用户确认付款。
- 支付结果异步通知后端,前端轮询或监听支付结果。
async function handlePayment(orderId) {
try {
const { prepay_id, nonceStr, timeStamp, sign } = await createOrder(orderId);
const paymentResult = await new Promise((resolve, reject) => {
wx.requestPayment({
timeStamp,
nonceStr,
package: `prepay_id=${prepay_id}`,
signType: 'MD5',
paySign: sign,
success: resolve,
fail: reject
});
});
await verifyPayment(orderId);
} catch (error) {
console.error('支付失败:', error);
}
}
13. 打包过程是怎样的?Webpack 的作用是什么?
- 打包过程:源代码(.vue、.js、.css 等) → Loader 处理 → Plugin 优化 → 输出打包文件。
- Webpack 作用:
- 模块打包(支持 ES6/TS/图片/字体等)。
- 代码分割、按需加载。
- 压缩优化。
14. 你用过微信开发者工具吗?主要用来做什么?
- 模拟小程序运行环境。
- 调试网络请求、数据存储、界面效果。
- 真机调试、预览、上传代码。
15. 如何解决不同浏览器的兼容性问题?
- 使用 Babel 转译 ES6+。
- 使用 PostCSS 处理 CSS 兼容。
- 使用 Polyfill(如 core-js)。
- CSS hack、条件注释。
16. 响应式布局一般有哪些实现方式?
- 媒体查询(Media Query)。
- 百分比布局。
- Flex/Grid 布局。
- rem/rpx 单位。