版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
2026JavaScript最新面试题及详细答案(真实面试版)一、JS基础核心面试题1.说说==和===的区别,实际开发怎么用?参考答案:==是宽松相等,会先做隐式类型转换,再比较值;===是严格相等,必须类型和值完全一致才为true,不做任何类型转换。规则:字符串和数字比较:==会把字符串转数字再对比null==undefined结果为true,null===undefined为false引用类型对比:两种运算符都是对比内存地址开发规范:全程优先用===,只在判断null/undefined场景偶尔用==(obj==null),简洁且精准。2.什么是变量提升?let/const/var提升的区别?参考答案:JS代码执行前,解析阶段会把变量、函数声明提前到当前作用域顶部,这个机制就是变量提升。三者核心区别:var:存在变量提升,默认初始化为undefined,允许重复声明、变量挂载到window,有函数级作用域let/const:存在提升,但暂时性死区,声明前不能访问,不挂载window,块级作用域,禁止重复声明const声明常量,必须初始化,不能修改引用地址,基础值不可变,引用值可修改内部属性开发建议:彻底弃用var,统一使用let/const。3.解释JS词法作用域,和动态作用域的区别?参考答案:JS采用词法作用域(静态作用域),函数的作用域、变量可访问范围,在函数定义阶段就已经确定,和函数调用位置无关。动态作用域是在函数调用时才确定作用域,JS不存在动态作用域。简单举例:嵌套函数内部可以访问外层函数变量,无论内部函数在哪里调用,都遵循定义时的作用域规则,这也是闭包实现的基础。4.this指向的五种绑定规则,逐一说明参考答案:this指向由函数调用方式决定,和定义位置无关,优先级从低到高如下:默认绑定:普通独立函数调用,非严格模式this指向window,严格模式指向undefined隐式绑定:对象方法调用,this指向调用的对象(谁调用指向谁)显式绑定:call/apply/bind手动修改this指向,优先级高于隐式绑定new绑定:new实例化构造函数,this指向新创建的实例对象,优先级高于显式绑定箭头函数绑定:无自身this,继承外层词法作用域的this,不参与上述绑定,无法被call/apply/bind修改5.null和undefined的区别?参考答案:undefined:变量已声明但未赋值、函数无返回值、对象不存在的属性,默认值为undefined,代表未定义、缺失值null:手动赋值的空值,代表主动置空,是一个空对象指针核心区别:undefined是系统默认空值,null是开发者手动定义的空值。拓展:typeofnull结果为object(历史bug),typeofundefined为undefined。二、闭包、原型、作用域高频题1.什么是闭包?闭包的优缺点、使用场景、内存问题参考答案:闭包指内层函数访问外层函数的变量,且内层函数被外部引用,导致外层作用域无法销毁的现象。简单说:函数嵌套+内部函数引用外部变量+内部函数对外暴露。优点:实现私有变量、私有方法,避免全局变量污染保存函数执行上下文,缓存变量状态支持函数柯里化、模块化开发、防抖节流封装缺点:外层作用域变量常驻内存,容易造成内存占用过高使用不当会引发内存泄漏使用场景:防抖节流、模块化封装、数据缓存、定时器回调、高阶函数内存优化:使用完毕手动置空闭包引用变量,切断引用链路,等待垃圾回收。2.原型和原型链的理解?instanceof原理参考答案:每个JS对象都有__proto__隐式原型,指向构造函数的prototype显式原型;每个构造函数都有prototype原型对象。原型链:对象通过__proto__层层向上查找原型,最终指向Ototype,顶端为null,这条查找链路就是原型链。作用:实现属性、方法的继承,复用原型上的方法,节省内存。instanceof原理:遍历实例的原型链,判断构造函数的prototype是否出现在实例的原型链上,是则返回true,否则false。3.如何判断一个变量是数组?列举所有方式参考答案:Array.isArray(arr):最推荐,精准、跨窗口有效,ES5+支持arrinstanceofArray:单一页面有效,跨iframe失效Ototype.toString.call(arr)==='[objectArray]':万能精准判断,可区分所有引用类型arr.constructor===Array:可被篡改,不推荐用于严谨判断三、异步JS、事件循环、Promise核心题1.详细说说JS事件循环机制(浏览器端)参考答案:JS是单线程语言,事件循环是实现异步的核心机制,核心流程:执行同步代码,所有同步任务进入执行栈,依次执行完毕异步任务区分微任务、宏任务,进入对应任务队列同步栈清空后,优先执行所有微任务队列微任务清空后,执行一轮宏任务循环往复,持续执行任务,就是事件循环任务分类(2026面试必考):微任务:Promise.then/catch/finally、async/await、queueMicrotask、MutationObserver宏任务:script整体代码、setTimeout、setInterval、AJAX、DOM事件、requestAnimationFrame2.Promise三种状态、特点、常用方法参考答案:Promise是异步编程解决方案,解决回调地狱问题,有三种状态:pending等待中:初始状态fulfilled成功:执行resolve后触发rejected失败:执行reject或代码报错触发核心特点:状态一旦改变,永久凝固,无法二次修改;只能从pending转为成功/失败。常用静态方法:Promise.all:全部成功才成功,一个失败直接失败,适合并发请求Promise.race:谁先完成就返回谁的结果,成功失败都生效Promise.allSettled:等待所有任务结束,返回每个任务结果状态,适合批量请求不抛错场景Promise.any:一个成功就成功,全部失败才失败3.async/await原理,和Promise的关系参考答案:async/await是Promise的语法糖,本质还是基于Promise实现,只是把异步代码改成同步写法,可读性更强。规则:async修饰函数,返回值自动包装成Promise对象await只能在async函数内使用,阻塞后续代码执行,等待Promise状态变更await成功获取resolve结果,失败需要try/catch捕获异常执行顺序:await后的代码会推入微任务队列,同步代码执行完后再执行。4.Promise串行、并发限制怎么实现?(2026大厂高频)参考答案:串行执行:多个Promise依次执行,上一个完成再执行下一个,用async/await循环实现。并发限制:控制同时执行的异步任务数量,避免大量请求并发导致接口雪崩,核心思路:维护任务队列+最大并发数,任务完成后自动补位新任务。实际开发中,请求批量场景优先使用封装好的并发限制工具,手写核心逻辑面试常考。四、ES6+至ES2025新特性(2026必考)1.说说ES2024/ES2025常用新特性参考答案:ES2024:Object.groupBy:数组对象分组,替代手动遍历分组逻辑Promise.withResolvers:简化Promise封装,直接获取resolve/rejectArray.fromAsync:异步数组转换,支持异步迭代器ES2025:私有字段#:类私有属性/方法,外部无法访问,真正私有化await顶层使用:模块顶层可直接用await,无需包裹async函数增强正则匹配、数值分隔符优化2.解构赋值的注意事项、默认值规则参考答案:解构赋值支持数组、对象快速取值,简化代码。默认值生效条件:对应值为undefined时默认值才生效,null、0、空字符串都会覆盖默认值。注意点:对象解构变量名必须和属性名一致,可自定义别名;数组解构按索引匹配;解构不会修改原数组、原对象。3.扩展运算符和Object.assign的深浅拷贝区别参考答案:扩展运算符(...)、Object.assign都是浅拷贝。只对第一层属性做拷贝,第二层及以上引用类型,依然共用内存地址,修改新对象深层属性会影响原对象。实现简单深拷贝:JSON.parse(JSON.stringify(obj)),缺点:无法拷贝函数、正则、undefined、循环引用。五、浏览器API、存储、事件机制1.localStorage、sessionStorage、cookie区别参考答案:特性cookielocalStoragesessionStorage存储大小4KB左右5MB+5MB+生命周期可设置过期时间,默认关闭页面失效永久存储,手动清除才失效当前标签页会话,关闭标签清空请求携带每次HTTP请求自动携带不参与请求不参与请求作用域同域名跨标签共享同域名跨标签共享仅限当前标签使用场景:cookie存登录凭证、token;localStorage存长期本地配置;sessionStorage存临时会话数据。2.事件冒泡、事件捕获、事件委托参考答案:事件捕获:事件从外层父元素向内层目标元素传递(由外到内)事件冒泡:事件触发后,从目标元素向外层父元素逐层冒泡(由内到外),默认事件都是冒泡机制事件委托:利用事件冒泡,给父元素绑定事件,统一处理子元素事件。优点:减少DOM事件绑定、节省内存、支持动态新增DOM元素事件生效。阻止冒泡:e.stopPropagation();阻止默认行为:e.preventDefault()3.防抖和节流的区别、使用场景、手写思路参考答案:防抖:频繁触发事件,只在停止触发后指定时间执行一次,连续触发会重置计时。场景:输入框搜索、窗口resize、表单输入校验节流:固定时间内只执行一次,无论触发多少次,保证频率稳定。场景:滚动监听、鼠标移动、按钮高频点击、页面拖拽核心思路:防抖靠定时器重置,节流靠时间戳/定时器锁限制频率。六、手写代码高频真题(2026必写)1.手写简易防抖函数参考答案:javascript
functiondebounce(fn,delay=300){
lettimer=null;
returnfunction(...args){
//每次触发清空定时器,重置计时
if(timer)clearTimeout(timer);
timer=setTimeout(()=>{
fn.apply(this,args);
timer=null;
},delay);
}
}2.手写简易节流函数参考答案:javascript
functionthrottle(fn,interval=300){
letlastTime=0;
returnfunction(...args){
constnow=Date.now();
if(now-lastTime>=interval){
fn.apply(this,args);
lastTime=now;
}
}
}3.手写Promise简易版(核心逻辑)参考答案:javascript
classMyPromise{
constructor(executor){
this.status='pending';
this.value=null;
this.reason=null;
this.onFulfilledCb=[];
this.onRejectedCb=[];
constresolve=(value)=>{
if(this.status==='pending'){
this.status='fulfilled';
this.value=value;
this.onFulfilledCb.forEach(cb=>cb(value));
}
}
constreject=(reason)=>{
if(this.status==='pending'){
this.status='rejected';
this.reason=reason;
this.onRejectedCb.forEach(cb=>cb(reason));
}
}
try{
executor(resolve,reject);
}catch(err){
reject(err);
}
}
then(onFulfilled,onRejected){
onFulfilled=typeofonFulfilled==='function'?onFulfilled:val=>val;
onRejected=typeofonRejected==='function'?onRejected:err=>{throwerr};
if(this.status==='fulfilled'){
onFulfilled(this.value);
}
if(this.status==='rejected'){
onRejected(this.reason);
}
if(this.status==='pending'){
this.onFulfilledCb.push(onFulfilled);
this.onRejectedCb.push(onRejected);
}
}
}4.手写深拷贝函数(完整版)参考答案:javascript
functiondeepClone(obj,map=newWeakMap()){
//基础类型、null直接返回
if(obj===null||typeofobj!=='object')returnobj;
//处理循环引用
if(map.has(obj))returnmap.get(obj);
//处理日期、正则
if(objinstanceofDate)returnnewDate(obj);
if(objinstanceofRegExp)returnnewRegExp(obj);
//创建新对象/数组
constnewObj=Array.isArray(obj)?[]:{};
map.set(obj,newObj);
//
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 急性呼吸道异物堵塞急救方法
- 2026年健康管理师三级考试模拟试题及答案
- 2026年节水知识竞赛试题库150道及完整答案【名校卷】
- 2026年冷藏药品的储存与运输管理培训考试试题及答案
- 2026年美甲设计(款式创意)试题及答案
- 2026年南通网约车考试题库及参考答案
- 2026年起重机械安全管理A5考试试题及答案
- 2026年普法模拟试题含完整答案(夺冠系列)
- 2026年人工智能产业发展趋势考试试题及答案
- 2026年人工智能训练师(四级)职业素养真题及答案
- 宜宾天程锂电新材有限公司2026年9月-12月自主招聘(144人)笔试模拟试题及答案解析
- 露天煤矿安全技术措施培训课件
- 部编版七年级语文上册第一二单元综合质量检测试卷
- 2026年4月自考13140财务会计(中级)试题试题及答案
- 医疗器械采购与使用指南
- 初中道德与法治教学中传统节日家国情怀的培育课题报告教学研究课题报告
- (2025年)湖南选调生考试真题及答案
- 2024-2025学年广东省广州市荔湾一中高一(上)期中英语试卷
- 年度招标代理合同协议书
- 高空作业防水施工方案
- DB23-T 1167-2024 装配式聚苯模块保温系统技术规程
评论
0/150
提交评论