1. JS由哪三部分组成?
- ECMAScript:核心语法和规则
- DOM(文档对象模型):操作HTML文档的接口
- BOM(浏览器对象模型):与浏览器交互的接口
2. JS有哪些内置对象?
- 基本对象:Object、Function、Array、String、Number、Boolean、Date、RegExp
- 错误对象:Error、EvalError、RangeError等
- 全局对象:Math、JSON
- 其他:Symbol、Map、Set、Promise等
3. 操作数组的方法有哪些?
- 修改原数组:push、pop、shift、unshift、splice、sort、reverse
- 不修改原数组:concat、slice、map、filter、reduce、forEach
- 查找:indexOf、lastIndexOf、find、findIndex
4. JS对数据类型的检测方式有哪些?
- typeof:检测基本数据类型
- instanceof:检测对象类型
- constructor:通过构造函数判断
- Object.prototype.toString.call():最准确的检测方法
5. 说一下闭包,闭包有什么特点?
- 定义:函数可以访问并操作其外部作用域中的变量
-
特点:
- 可以访问外部函数的变量
- 变量不会被垃圾回收
- 可以创建私有变量
6. 前端的内存泄漏怎么理解?
- 定义:程序中已动态分配的堆内存由于某种原因未释放或无法释放
-
常见原因:
- 意外的全局变量
- 被遗忘的定时器
- 未清理的DOM引用
- 闭包使用不当
7. 事件委托是什么?
- 概念:利用事件冒泡机制,将事件监听器添加到父元素上,通过事件冒泡来处理子元素的事件
- 优点:减少内存占用、动态绑定事件
8. 基本数据类型和引用数据类型的区别?
- 基本类型:存储在栈中,值不可变,赋值时拷贝值
- 引用类型:存储在堆中,赋值时拷贝引用地址
9. 说一下原型链。
- 概念:每个对象都有一个内部属性[[Prototype]],指向其原型对象,形成链式结构
- 作用:实现属性和方法的继承
10. new操作符具体做了什么?
- 创建一个空对象
- 设置原型链
- 执行构造函数
- 返回对象
11. JS是如何实现继承的?
- 原型链继承
- 构造函数继承
- 组合继承
- 寄生组合继承
- ES6 Class继承
12. JS的设计原理是什么?
- 基于原型的面向对象
- 单线程事件循环
- 动态类型
- 函数是一等公民
13. JS中关于this指向的问题
- 全局环境:指向全局对象
- 函数调用:非严格模式指向全局对象,严格模式为undefined
- 对象方法:指向调用对象
- 构造函数:指向实例对象
- 箭头函数:继承外层作用域的this
14. script标签里的async和defer有什么区别?
- async:异步加载,加载完立即执行
- defer:异步加载,等待DOM解析完成后执行
15. setTimeout最小执行时间是多少?
- HTML5标准规定为4ms,但实际浏览器实现可能不同
16. ES6和ES5有什么区别?
- ES6引入了let/const、箭头函数、类、模块等新特性
- 语法更简洁,功能更强大
17. ES6的新特性有哪些?
- let/const
- 箭头函数
- 模板字符串
- 解构赋值
- Promise
- Class
- Module
18. call, apply, bind三者有什么区别?
- call:立即执行,参数逐个传递
- apply:立即执行,参数以数组形式传递
- bind:返回新函数,不立即执行
19. 用递归的时候有没有遇到什么问题?
- 栈溢出
- 重复计算
- 性能问题
20. 如何实现一个深拷贝?
// 使用JSON.parse(JSON.stringify())
// 使用递归实现
// 使用lodash的cloneDeep
21. 说一下事件循环。
- 概念:JavaScript处理异步任务的机制
- 流程:执行栈 → 微任务队列 → 宏任务队列
22. ajax是什么?怎么实现的?
- 定义:异步JavaScript和XML,用于在后台与服务器交换数据
- 实现:XMLHttpRequest或fetch API
23. get和post有什么区别?
- GET:参数在URL中,长度限制,可缓存
- POST:参数在请求体中,无长度限制,不可缓存
24. promise的内部原理是什么?它的优缺点是什么?
- 原理:状态机(pending、fulfilled、rejected)
- 优点:解决回调地狱
- 缺点:无法取消,错误处理复杂
25. promise和async await的区别是什么?
- Promise:链式调用
- async/await:同步写法,更易读
26. 浏览器的存储方式有哪些?
- localStorage
- sessionStorage
- cookie
- indexedDB
27. token存在sessionstorage还是localstorage?
- 通常存在localStorage中,但需考虑安全因素
28. token的登录流程。
- 用户登录
- 服务器验证并返回token
- 客户端存储token
- 后续请求携带token
29. 页面渲染的过程是怎样的?
- 解析HTML构建DOM树
- 解析CSS构建样式树
- 合并DOM树和样式树构建渲染树
- 布局计算
- 绘制
30. DOM树和渲染树有什么区别?
- DOM树:完整的HTML结构
- 渲染树:只包含可见元素,包含样式信息
31. 精灵图和base64的区别是什么?
- 精灵图:将多个小图合并为一张大图
- base64:将图片转换为文本编码
32. svg格式了解多少?
- 矢量图形格式
- 基于XML
- 可缩放不失真
- 支持动画和交互
33. 了解过JWT吗?
- 定义:JSON Web Token,用于身份验证
- 结构:头部.载荷.签名
34. npm的底层环境是什么?
- 基于Node.js的包管理器
35. HTTP协议规定的协议头和请求头有什么?
- 请求头:User-Agent、Content-Type等
- 响应头:Content-Type、Cache-Control等
36. 说一下浏览器的缓存策略。
- 强缓存:Expires、Cache-Control
- 协商缓存:Last-Modified/If-Modified-Since、ETag/If-None-Match
37. 说一下什么是"同源策略"?
- 定义:协议、域名、端口都相同才允许通信
- 目的:防止恶意网站窃取数据
38. 防抖和节流是什么?
- 防抖:事件触发后延迟执行,新事件会重置延迟
- 节流:固定时间间隔内只执行一次
39. 解释一下什么是json?
- 定义:JavaScript对象表示法,轻量级数据交换格式
- 特点:易于人阅读和编写,机器解析和生成
40. 当数据没有请求过来的时候,该怎么做?
- 显示loading状态
- 提供默认值
- 错误处理和重试机制
41. 有没有做过无感登录?
- 通过token自动刷新实现
- 利用localStorage存储用户信息
42. 大文件上传是怎么做的?
- 分片上传
- 断点续传
- 并行上传多个分片