Skip to content
错题本 0已完全掌握 0正在读取本地学习状态…
先想一想,再看答案

JavaScript 基础 ​

复习方式:先遮住答案口述 30~90 秒,再核对关键点;“追问与易错点”用于进一步练习。

1. 有哪些数据类型?如何判断? ​

展开答案与追问

参考答案: 原始类型有 undefined、null、boolean、number、bigint、string、symbol,另有 object。typeof null 是历史遗留的 object;数组使用 Array.isArray;跨 iframe 的对象用 instanceof 可能失效。

追问与易错点: NaN 的类型是 number,判断 NaN 优先使用 Number.isNaN。

2. var、let、const 的区别? ​

展开答案与追问

参考答案: var 是函数作用域,声明提升且初始化为 undefined;let/const 是块级作用域,在初始化前处于暂时性死区。const 必须初始化,限制绑定重新赋值,不会冻结对象内容。

追问与易错点: 不能说 let 完全不提升;更准确是声明已建立,但初始化前访问会抛错。

3. ==、===、Object.is 有什么区别? ​

展开答案与追问

参考答案: == 可能进行类型转换,=== 不做跨类型转换。Object.is 与 === 的主要区别是 Object.is(NaN, NaN) 为 true,且区分 +0 与 -0。业务比较通常优先 ===,再按需求处理特殊值。

追问与易错点: [] == false 为 true,[] === false 为 false;不要将隐式转换作为业务协议。

4. 什么是闭包? ​

展开答案与追问

参考答案: 函数可以访问其定义时的词法环境,即使外层调用已经结束。这支持私有状态、工厂函数与回调。闭包本身不是内存泄漏;只有不再需要的数据仍被可达引用保留,才可能造成问题。

追问与易错点: 循环中的 var 回调共享绑定;let 可为每次迭代创建独立绑定。

5. this 是如何确定的? ​

展开答案与追问

参考答案: 普通函数的 this 取决于调用方式:对象方法调用、显式 call/apply/bind、new 调用等;独立调用在严格模式下为 undefined。箭头函数没有自己的 this,从外层词法环境捕获,也不能作为构造函数。

追问与易错点: 把 obj.method 赋给变量再调用,会丢失原对象的调用关系。

6. 原型链与 class 是什么关系? ​

展开答案与追问

参考答案: 对象通过内部原型连接到另一个对象,属性查找沿链向上直到 null。构造函数的 prototype 通常成为其实例的原型。class 基于原型机制提供更清晰的语法,并有严格模式、不可直接当普通函数调用等语义。

追问与易错点: 函数的 prototype 与对象的内部原型不是同一个概念;用 Object.getPrototypeOf 查看后者。

7. 浅拷贝与深拷贝的区别? ​

展开答案与追问

参考答案: 展开语法与 Object.assign 只复制一层,嵌套对象仍共享引用。structuredClone 可复制许多内建结构并处理循环引用,但不能复制函数和 DOM 节点等。JSON 序列化会丢失部分类型与值,遇到循环引用会失败。

追问与易错点: 深拷贝应先明确支持的数据类型、原型、属性描述符与共享引用语义。

8. 防抖和节流如何选择? ​

展开答案与追问

参考答案: 防抖在连续调用停止一段时间后执行,适合搜索建议;节流限制执行频率,适合滚动采样。还需说明是否支持首触发、尾触发和取消。视觉更新可以结合 requestAnimationFrame 对齐帧。

追问与易错点: 防抖只能减少发起请求,无法自动解决已经发出的请求乱序。

9. Map/Set 与 Object/Array 有什么区别? ​

展开答案与追问

参考答案: Map 支持任意值作键并保留插入顺序;Object 主要表示记录,其键为字符串或 Symbol。Set 用于唯一值集合,对对象按引用区分,不能直接按对象内容去重。

追问与易错点: 数组对象去重可按业务 ID 建 Map,并明确同 ID 保留首项还是末项。

10. ES Module 与 CommonJS 的区别? ​

展开答案与追问

参考答案: ESM 使用 import/export,提供可静态分析的模块结构,导入绑定是活绑定;CommonJS 常用 require/module.exports,在运行时加载。浏览器原生支持 ESM,CommonJS 通常需要运行时或构建处理。

追问与易错点: 循环依赖两者都可能存在,但初始化时序不同,不应靠循环依赖组织业务。

先尝试回答,再展开答案。每天进步一点。