前端面试题目总结(JavaScript)(上)

简介: 前端面试题目总结(JavaScript)

1、JS的数据类型


1、JS的数据类型可以分为基本数据类型和引用类型

基本数据类型有:String(字符串)、Number(数值)、Boolean(布尔值)、null()、undefined(未定义)、ES6中新添加了Symbol(唯一值)、binInt(大的整数值)

引用类型有:Object(对象)、Function(函数)、Date(日期)、RegExp(正则)、Array(数组)

基本数据类型与引用数据类型的区别:

1、基本数据类型存放到栈中,引用数据类型存放到堆中

2、基本数据类型比较的是值,引用数据类型比较的是是否指向同一个地址


2、null与undefined的区别


null表示为值为空的对象,指向的是一个空对象,转为数值为0

undefined表示为未定义的值,当变量声明了但没有定义的时候,应为undefined

相同点:它们都是值为空的,==的时候为true

不同点:类型不一样,null的数据类型为Object,undefined的数据类型为undefined,===为false


3、检测数据类型的方法


  • 1、typeof:检测数据类型,基本数据类型可以检测出来,但引用类型不能细分,都为Obejct
  • 2、instanceof:比较数据类型
  • 3、constructor:获取当前构造器
  • 4、Object.prototype.toString().call:获取当前实例所有的类信息(最为准确)


4、=====的区别


  • 1、==是等于,它会比较值,如果类型不一样,它会强制转换后再比较值
  • 2、===是全等于,类型和值都会比较,不会强制转换,其中有一个不同,均为false


5、作用域和作用域链


一个变量的使用范围就叫做作用域,作用域可以分为全局作用域和局部作用域。

一个HTML就是一个全局作用域,一个函数就是一个局部作用域。

当查找对象的某个属性时,先会查找它当前的内部作用域,如果没有找到就往上一层作用域找,一直找到全局作用域,这个链式查找的过程就叫做作用域链。


6、判断数组类型的方法


  • 1、Array.isArray();
  • 2、arr.constructor.toString().indexOf(‘Array’)
  • 3、Object.prototype.toString().call(arr)


7、宏任务与微任务


JS的异步任务可以分为宏任务与微任务

宏任务有setInterval、setTimeOut计时器、Ajax

微任务就是promise.then、promise.catch、promise.finally

宏任务与微任务的执行操作顺序为:

1、当一个宏任务进行时,它会观察是否有微任务

2、如果有微任务,当这个宏任务完成之后,就会立即处理当前所有的微任务

3、当所有的微任务完成后,才进行下一个的宏任务

4、所以微任务优先,宏任务与微任务交替执行。


8、new对象的操作过程


  • 1、创建一个新的对象
  • 2、构造函数指向这个对象
  • 3、执行这个构造函数的所有代码
  • 4、返回这个新的对象


9、闭包


函数里面嵌套一个函数,里面的函数就叫做闭包。

优点:闭包可以调用外层函数的变量,实现数据共享,变量始终保持在内存之中,延长变量的生命周期。

缺点:闭包执行完之后,外层函数的变量不会被销毁,而是存放在内存中,容易信息泄露,所以如果没有用的信息的话,就删除掉,减少内存损耗。

闭包的应用场景:防抖、节流


10、原型与原型链


原型就是一个对象,原型对象可以分为显性原型对象和隐性原型对象。


显性原型对象就是prototype,它是函数对象所特有的,指向Object。


隐性原型对象就是__proto__,它是所有对象都拥有的,对象的隐性原型对象指向它的构造函数的显性原型对象。


原型链就是:当查找对象的属性或者方法的时候,就会在对象内部找,如果没有,就通过隐性原型对象这条链,指向构造函数的显性原型对象,就在构造函数里面找,如果没有找到就通过显性原型对象这条链,指向Object,直到找到为止,这个链式查找的过程,就叫做原型链


11、为什么0.1+0.2!=0.3,如何相等?


  • 因为精度缺失,浮点数相加要转为二进制,然而存储空间并没有这么大,所以需要进1去0,导入二进制相加精度缺失,所以0.1+0.2!=0.3
  • 解决方案:可以变成整数后相加,再返回浮点数。


12、回调函数


一个函数被作为参数被另一个函数所调用,这个函数就叫做回调函数。


简单来说,就是你定义了一个函数,但是你没有立即使用它,而是用另一个函数调用它,这就叫做回调函数。


优点:业务逻辑分离,耦合性降低。


缺点:回调函数以前被用来执行异步操作,这样的话,异步操作增多,就会不断嵌套,造成回调地狱,观赏和维持起来很难,所以ES6新添加了一个Promise对象来解决这个回调地狱问题。


13、Promise对象


Promise对象是ES6新添加的一个用来处理异步操作的对象。

Promise有3个状态:pending(进行中)、fulfilled(已完成)、rejected(已失败)

Promise有2个特点:

1、它的状态不受外界的影响

2、它的状态变化只能有2种1,一种是从pending转为resolved,一种是从pending转为rejected。

Promise的好处:

1、比传统的回调函数更加规范化

2、支持链式调用,有效解决了回调地狱问题


14、递归


  • 函数内部调用自己,就叫做递归。
  • 递归有两个条件,一个是自己调用自己,一个是要有结束条件,返回之前的所有结果。
  • 最常见的应用场景就是阶乘,如求5的阶乘就返回5相乘,再返回调用自己(n-1),直结束条件为1,返回之前相乘的数,实现5的阶乘。



15、变量提升和函数提升


在JS编译过程中,会把变量的声明语句提到作用域的最顶部,实现变量提升。函数提升也是一样的。

这样的好处就是:

1、一次性编译完成,下次调用的时候就不用再编译,优化性能。

2、防止出错,可以先调用再声明也不会报错。(不推荐,还是严格遵守,先声明后定义,所以ES6新添加了let)



相关文章
|
1天前
|
设计模式 前端开发 JavaScript
揭秘!前端大牛们如何巧妙利用JavaScript,打造智能交互体验!
【10月更文挑战第30天】前端开发领域充满了无限可能与创意,JavaScript作为核心语言,凭借强大的功能和灵活性,成为打造智能交互体验的重要工具。本文介绍前端大牛如何利用JavaScript实现平滑滚动、复杂动画、实时数据更新和智能表单验证等效果,展示了JavaScript的多样性和强大能力。
10 4
|
3天前
|
JavaScript 前端开发 开发者
前端框架对比:Vue.js与Angular的优劣分析与选择建议
【10月更文挑战第27天】在前端开发领域,Vue.js和Angular是两个备受瞩目的框架。本文对比了两者的优劣,Vue.js以轻量级和易上手著称,适合快速开发小型到中型项目;Angular则由Google支持,功能全面,适合大型企业级应用。选择时需考虑项目需求、团队熟悉度和长期维护等因素。
11 1
|
7天前
|
缓存 前端开发 JavaScript
"面试通关秘籍:深度解析浏览器面试必考问题,从重绘回流到事件委托,让你一举拿下前端 Offer!"
【10月更文挑战第23天】在前端开发面试中,浏览器相关知识是必考内容。本文总结了四个常见问题:浏览器渲染机制、重绘与回流、性能优化及事件委托。通过具体示例和对比分析,帮助求职者更好地理解和准备面试。掌握这些知识点,有助于提升面试表现和实际工作能力。
31 1
|
14天前
|
前端开发 JavaScript 安全
JavaScript前端开发技术
JavaScript(简称JS)是一种广泛使用的脚本语言,特别在前端开发领域,它几乎成为了网页开发的标配。从简单的表单验证到复杂的单页应用(SPA),JavaScript都扮演着不可或缺的角色。
17 3
|
4天前
|
JavaScript 前端开发 API
前端框架对比:Vue.js与Angular的优劣分析与选择建议
【10月更文挑战第26天】前端技术的飞速发展让开发者在构建用户界面时有了更多选择。本文对比了Vue.js和Angular两大框架,介绍了它们的特点和优劣,并给出了在实际项目中如何选择的建议。Vue.js轻量级、易上手,适合小型项目;Angular结构化、功能强大,适合大型项目。
11 0
|
7天前
|
前端开发 JavaScript UED
"前端小技巧大揭秘:JS如何将后台时间戳秒变亲切小时前、分钟前,让用户秒懂,提升互动体验!"
【10月更文挑战第23天】在Web开发中,将后台返回的时间戳转换为“小时前”、“分钟前”、“刚刚”等友好的时间描述是常见需求。本文介绍如何用JavaScript实现这一功能,通过计算当前时间和时间戳的差值,返回相应的描述,提升用户体验。
15 0
|
18天前
|
JavaScript 前端开发 应用服务中间件
vue前端开发中,通过vue.config.js配置和nginx配置,实现多个入口文件的实现方法
vue前端开发中,通过vue.config.js配置和nginx配置,实现多个入口文件的实现方法
93 0
|
18天前
|
前端开发 JavaScript 程序员
【从前端入门到全栈】Node.js 之核心概念
【从前端入门到全栈】Node.js 之核心概念
|
6月前
|
前端开发 JavaScript 网络协议
前端最常见的JS面试题大全
【4月更文挑战第3天】前端最常见的JS面试题大全
98 5
|
6月前
|
JavaScript 前端开发
web前端JS高阶面试题(1),高级开发工程师面试
web前端JS高阶面试题(1),高级开发工程师面试