前端面试必刷!

本文主要探讨了前端面试中常见的问题,包括事件委托的概念及应用、JavaScript数据类型、Promise原理和使用、Async & Await的区别、原型链的解释、异步请求顺序处理、ES6的Set和Map数据结构等核心知识点,帮助开发者准备面试。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.什么是事件委托?为什么这样做?

答:它还有一个名字叫事件代理,事件委托就是利用事件冒泡,只指定一个事件处理程序,就可以管理某一类型的所有事件。

为什么这样做呢?通过事件委托可以减少事件处理程序数量,这样就能大大的减少与dom的交互次数,提高性能;

2.js的数据类型?

答:JS的数据类型有8种

ES5的时候,我们认知的数据类型确实是 6种:Number、String、Boolean、undefined、object、Null。

ES6 中新增了一种 Symbol 。这种类型的对象永不相等,即始创建的时候传入相同的值,可以解决属性名冲突的问题,做为标记。

谷歌67版本中还出现了一种 bigInt。是指安全存储、操作大整数。(但是很多人不把这个做为一个类型)。

JS数据类型:Object 中包含了哪几种类型?其中包含了Date、function、Array等(这三种比较常用)。

3.for in、Object.keys()区别?哪个要用于遍历原型链上的属性?

答:for-in 是javaScript中最常见的迭代语句,常常用来枚举对象的属性。某些情况下,可能按照随机顺序遍历数组元素;而Object.keys(),可以返回以对象的属性为元素的数组。数组中属性名的顺序跟使用       for-in遍历返回的顺序是一样的。

二者遍历的数量是不同的,for-in 不单可以枚举自身属性,也可以枚举继承自原型链上的属性,Object.keys()只可以枚举自身属性。      

for-in会遍历原型链上的属性,而Object.keys不会。

4.NaN == NaN 的结果是什么?为什么? 

 答:NaN == NaN  的执行结果是 false。因为JavaScript规定,NaN表示的是非数字,但是这个非数字也是不同的,因此 NaN 不等于 NaN,两个NaN永远不可能相等

5.说一下你对Promise的了解?说说你对Promise的原理的理解?

答:Promise 是异步编程的一种解决方案,比传统的解决方案——回调函数和事件——更合理和更强大。

所谓promise,简单说就是一个容器,里面保存着某个未来才会结束的事件(通常是一个异步操作)的结果。从语法上说,Promise 是一个对象,从它可以获取异步操作的消息。

 (1).Promise.all(),一个失败后,其他的还返回吗?

   答:不会返回,promise.all()失败的时候只返回最先被reject失败状态的那个实例对象的值

 (2).Promise.all()、Promise.race()区别?

   答:两者都是可以同时调用多个promise实现,Promise.all可以将多个实例组装成一个新的实         例,成功的时候返回一个成功数组,失败的时候则返回最先被reject失败状态的值;其中有一个       实例不成功则返回reject;race()是赛跑的意思,也就是说Promise.race([p1, p2, p3])里面的结果哪     个获取的快,就返回哪个结果,不管结果本身是成功还是失败

 (3).Promise有哪些状态。

    答:有三个状态:pending : 等待     fullfilled(resolved) :成功     reject: 失败

6.Async&await和promise有什么区别? 

答:(1)函数前面多了一个async关键字。await关键字只能用在async定义的函数内。async函数会引式返回一个promise

(2)简洁:使用async和await明显节约了不少代码,不需要.then,不需要写匿名函数处理promise的resolve的值,不需要定义多余的data变量,还避免了嵌套代码。

(3)async/await让try/catch 可以同时处理同步和异步错误。try/catch不能处理JSON.parse的错误,因为他在promise中。此时需要.catch,这样的错误处理代码非常冗余。并且,在我们的实际生产代码会更加复杂

(4)async/await能够使得代码调试更简单

7.简单介绍原型链?

 答:所有对象都有自己的原型对象(prototype)。一方面,任何一个对象,都可以充当其他对象的原型;另一方面,由于原型对象也是对象,所以它也有自己的原型。因此,就会形成一个“原型链”(prototype chain)最终都可以上溯到Object.prototype Object.prototype对象有没有它的原型呢?回答Object.prototype的原型是null。null没有任何属性和方法,也没有自己的原型。因此,原型链的尽头就是null。

 

8.如果后端有3个请求,如何保证顺序

答:可以使用Promise链式调用,按顺序执行;也可以使用async函数和关键字await顺序执行

 9.es6的set ,map介绍?

答:set和map都是es6新增的数据结构。其中set是一个类数组结构,值是唯一的,没有重复的值。map类似于对象,也是键值对的集合,但是“键”的范围不限于字符串,各种类型的值(包括对象)都可以当作键。也就是说,Object 结构提供了“字符串—值”的对应,Map 结构提供了“值—值”的对应,是一种更完善的 Hash 结构实现。如果你需要“键值对”的数据结构,Map 比 Object 更合适。

10.class与function定义类的区别?

答:

  1. 关于构造器constructor:在function定义的构造函数中,其prototype.constructor属性指向构造器自身,在class定义的类中,constructor其实也相当于定义在prototype属性上
  2. 重复定义:function会覆盖之前定义的方法;class会报错
  3. 原型或者类中方法的枚举:class中所有方法不可枚举
  4. class没有变量提升,function有
  5. class定义的类没有私有方法和私有属性

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值