版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
JS常见面试题(真实面试版)一、JS基础语法&数据类型1.JS有哪些数据类型?怎么分类?分为基本数据类型和引用数据类型两大类。基本类型(值类型):String、Number、Boolean、Null、Undefined、Symbol、BigInt,存储在栈内存,赋值是完整拷贝值。引用类型:Object、Array、Function、Date、RegExp等,存储在堆内存,栈中只存内存地址,赋值是拷贝地址,多个变量会指向同一个对象。2.Null和Undefined的区别?Undefined表示变量已声明但未赋值、对象不存在的属性、函数无返回值,是未定义的状态。Null是手动赋值的空值,代表主动置空,一般用于释放对象、初始化空对象变量。区别:typeofundefined为undefined;typeofnull为object(历史bug);null==undefined为true,null===undefined为false。3.说说==和===的区别==是宽松相等,会先进行隐式类型转换,再比较值。===是严格相等,先比较类型,类型不同直接false,类型相同再比较值,日常开发优先使用===,避免隐式转换带来的bug。常见特例:''==0、true==1、false==0均为true。4.typeof和instanceof的区别typeof:检测基本数据类型,返回字符串类型,能准确判断string/number/boolean/undefined/symbol/bigint,null和所有引用类型都会返回object,无法区分数组、普通对象。instanceof:检测引用类型的原型关系,判断构造函数的prototype是否出现在实例的原型链上,只能判断对象、数组、函数等引用类型,无法判断基本类型。5.0.1+0.2为什么不等于0.3?怎么解决?JS数字遵循IEEE754双精度浮点数标准,二进制无法精准表示部分十进制小数,0.1和0.2存储时存在精度丢失,相加后结果为0.30000000000000004。解决方式:1、保留固定小数位数toFixed;2、将小数转为整数运算后再还原;3、使用成熟数学精度库。二、作用域、闭包、变量提升1.讲讲JS的作用域类型全局作用域:整个脚本生效,页面关闭才销毁。函数作用域:函数内部生效,函数执行结束销毁。块级作用域:ES6新增,由{}、if、for、while等代码块产生,仅let/const支持,var不具备块级作用域。2.var、let、const的区别var:函数作用域,存在变量提升,可重复声明、可修改,无暂时性死区,挂载到window。let:块级作用域,存在变量提升但有暂时性死区,不可重复声明,可修改变量值。const:块级作用域,存在暂时性死区,不可重复声明,声明必须赋值,基础类型不可修改,引用类型可修改内部属性。3.什么是变量提升?JS代码执行分为编译和执行阶段,编译阶段会提前声明var变量和函数声明。var变量提升:只声明不赋值,初始值为undefined。函数声明提升:整体提升,可在声明前调用。注意:let/const有提升,但存在暂时性死区,声明前访问会报错,不会出现undefined。4.什么是闭包?闭包的优缺点和使用场景闭包是内层函数访问外层函数的变量,且外层函数执行结束后,内层函数依然能保留外层变量的作用域的现象。简单说:函数嵌套,内部函数引用外部函数变量,就是闭包。优点:私有化变量、延长变量生命周期、实现函数柯里化、防抖节流。缺点:变量常驻内存,容易造成内存泄漏,过多使用会影响性能。常见场景:私有变量、定时器回调、事件监听、防抖节流函数。三、原型与原型链1.说说原型、prototype、__proto__、constructorprototype:构造函数独有,是函数的原型对象,存放实例共享的方法和属性,节省内存。__proto__:所有对象独有,指向创建该对象的构造函数的prototype,是原型链的查找通道。constructor:原型对象上的属性,指向对应的构造函数。2.什么是原型链?原型链的查找规则原型链是对象通过__proto__层层向上查找原型对象,最终指向null的链式结构,是JS实现继承的核心。查找规则:访问对象属性/方法时,先在自身查找,找不到则顺着__proto__去原型对象查找,层层向上,直到Ototype,最后找不到返回undefined。3.JS如何实现继承?常用方式对比1、原型链继承:简单,但所有实例共享原型属性,修改会互相影响,无法传参。2、构造函数继承:解决共享问题、可传参,但无法继承原型方法。3、组合继承:结合前两种,兼顾属性和原型方法继承,是ES5常用最优方案。4、ES6class继承:extends+super,语法简洁、原生支持,项目最常用。四、执行上下文、执行栈、事件循环1.什么是执行上下文?有几种?执行上下文是JS代码执行时的环境,包含变量、作用域、this等信息。分为三种:全局执行上下文、函数执行上下文、eval执行上下文。2.讲讲JS执行栈执行栈是后进先出的栈结构,用于存放执行上下文。代码执行时,全局上下文先入栈,调用函数时函数上下文入栈,函数执行完毕出栈,全局上下文在页面关闭后出栈。3.宏任务和微任务的区别?事件循环执行顺序微任务:优先级更高,本轮宏任务执行完成后立即执行,包含Promise.then/catch/finally、async/await、queueMicrotask、MutationObserver。宏任务:下一轮事件循环执行,包含setTimeout、setInterval、AJAX、DOM事件、script整体代码。完整执行顺序:执行同步代码(入栈出栈)>清空所有微任务>执行一个宏任务>再次清空微任务,循环往复。4.async/await的执行机制async函数默认返回Promise对象,await会阻塞当前函数后续代码,让出执行栈。await后的代码会被推入微任务队列,等同步代码执行完毕、清空微任务后,才会继续执行。五、this指向问题(高频必考)1.不同场景下this的指向1、全局普通函数调用:this指向window(浏览器)/global(node)。2、对象方法调用:this指向调用该方法的对象。3、构造函数调用:this指向new创建的实例对象。4、箭头函数:没有自己的this,继承外层作用域的this,且无法修改。5、call/apply/bind:手动修改this指向。2.call、apply、bind的区别相同点:都是修改函数this指向。区别:call、apply立即执行函数;bind返回新函数,不会立即执行。传参不同:call逐个传参;apply数组传参;bind可分批传参。六、ES6+核心知识点1.箭头函数的特点和注意事项特点:简洁语法、无this、无arguments、不能作为构造函数、无原型。注意事项:不适合用作对象方法、不适合绑定事件回调(this会跑偏),适合纯逻辑回调、工具函数。2.Set和Map的作用Set:无序、唯一值集合,可快速数组去重,存储基本类型,支持增删查。Map:键可以是任意类型(对象/函数/基本类型),键唯一有序,适合复杂键值对存储,比普通对象更灵活。3.解构赋值的注意点数组解构按位置匹配,对象解构按属性名匹配;可设置默认值,默认值仅在值为undefined时生效。4.Promise三种状态及特点pending(等待)、fulfilled(成功)、rejected(失败)。状态一旦改变,不可逆、不可修改。pending可转为成功或失败,成功和失败状态无法互相转换。常用方法:then、catch、finally、all、race、allSettled。七、数组常用方法与手写题1.数组变异方法和非变异方法变异(修改原数组):push、pop、shift、unshift、splice、sort、reverse。非变异(返回新数组):map、filter、reduce、slice、concat、every、some、find。2.map和forEach的区别forEach:单纯遍历,无返回值,无法中断遍历。map:遍历并返回新数组,支持链式调用,适合数据加工处理。3.高频手写题(面试常考)1、手写防抖、节流函数2、手写数组去重(ES6Set、双层循环、indexOf)3、手写深拷贝、浅拷贝4、手写call、apply、bind5、手写Promise简易版八、内存、闭包、性能相关1.浅拷贝和深拷贝的区别浅拷贝:只拷贝第一层属性,复杂引用类型只拷贝地址,修改新对象会影响原对象。Object.assign、展开运算符、slice都是浅拷贝。深拷贝:递归拷贝所有层级属性,新旧对象完全独立,互不影响。JSON.parse(JSON.stringify())简易深拷贝(无法处理函数、undefined、循环引用),递归手写深拷贝适配所有场景。2.JS内存泄漏的常见场景1、未清空的定时器、事件监听2、闭包滥用,常驻内存变量不释放3、全局变量过多、未手动置空4、DOM节点移除后,变量仍引用节点3.防抖和节流的区别及使用场景防抖:触发事件后延迟执行,期间再次触发会重置计时,只执行最后一次。场景:搜索框输入、窗口resize、表单输入校验。节流:固定时间内只执行一次,匀速执行、限制频率。场景:滚动监听、鼠标移动、按钮频繁点击、轮播图切换。九、异步与面试经典问答题1.为什么要用异步?JS是单线程语言,同步代码
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025上半年中学教师资格证《英语学科知识与教学能力》真题卷
- 2025消防考试安全题库及答案
- 2025医院感染预防与控制知识考试题与标准答案
- 2026年2026年新版科学知识综合考试题库试卷及答案
- 2026年甘肃环县自来水公司招聘临考冲刺模拟试卷及答案
- 2026年电子商务师考试题及答案
- 【方案】2026智慧港区综合解决方案
- 2026下半年高中信息技术教资面试网络安全题库
- 高中音乐教资面试乐理专项题库
- 肝功能不全病人的手术麻醉
- 云南民族大学附属高级中学2026届高三上学期联考(一)地理试卷(含解析)
- 中药材采购合同协议模板
- 企业内部控制系统模板
- 底商出租管理办法
- 水产工程技术人员岗位面试问题及答案
- 化工现场定置管理制度
- 五年级科学家长会教学课件
- 医院vi 设计合同标准文本
- 化工厂变换岗位考试题库
- 哲学类论文开题报告模板
- 2024建设工程施工合同(示范文本GF)
评论
0/150
提交评论