前端面试:JavaScript 基础
1. JS 的数据类型有哪些? 基本类型有 string 、 number 、 boolean 、 null 、 undefined 、 symbol 、 bigint ;引用类型主要是 object ,数组、函数、日期等都属于对象。 2. null 和 undefined 的区别? undefined 表示变量声明了但没有赋值,或对象属性不存在; null 表示人为设置为空值。简单说, undefined 更偏“未定义”, null
补充一、JavaScript 基础
1. JS 的数据类型有哪些?
基本类型有 string、number、boolean、null、undefined、symbol、bigint;引用类型主要是 object,数组、函数、日期等都属于对象。
2. null 和 undefined 的区别?
undefined 表示变量声明了但没有赋值,或对象属性不存在;null 表示人为设置为空值。简单说,undefined 更偏“未定义”,null 更偏“空对象/空结果”。
3. 深拷贝和浅拷贝区别?
浅拷贝只复制第一层,内部引用对象仍然共享;深拷贝会递归复制所有层级。项目里简单对象可用 structuredClone,复杂场景要注意函数、日期、Map、循环引用等问题。
4. 原型链是什么?
每个对象都有原型,对象访问属性时,如果自身没有,会沿着原型链向上查找,直到 null。JS 的继承本质上就是基于原型链实现的。
5. 闭包是什么?有什么用?
闭包是函数可以访问其外层作用域变量,即使外层函数已经执行完。常用于封装私有变量、函数柯里化、防抖节流、保存状态。注意闭包长期持有引用时可能造成内存占用。
6. 事件循环是什么?
JS 是单线程执行,异步任务通过事件循环调度。同步代码先执行,微任务如 Promise.then、queueMicrotask 再执行,最后执行宏任务如 setTimeout、事件回调等。
7. 宏任务和微任务有哪些?
宏任务常见有 setTimeout、setInterval、DOM 事件、网络回调;微任务常见有 Promise.then、MutationObserver、queueMicrotask。微任务会在当前宏任务结束后、页面渲染前尽快清空。
8. Promise 的理解?
Promise 用来处理异步流程,有 pending、fulfilled、rejected 三种状态,状态一旦改变不可逆。async/await 是基于 Promise 的语法糖,让异步代码更像同步代码。
9. 箭头函数和普通函数区别?
箭头函数没有自己的 this,会捕获外层 this;不能作为构造函数;没有 arguments。普通函数的 this 由调用方式决定。
10. 防抖和节流手写思路?
防抖用定时器,每次触发先清掉旧定时器,停止触发一段时间后执行;节流记录上次执行时间或使用定时器,在固定间隔内只执行一次。
评论留言
登录后可留言和点赞