2022 前端面试题

本文总结了2022年前端面试中常见的107个知识点,涵盖了JavaScript基础、原型与继承、闭包、Vue、Vuex、事件、异步处理、Ajax、Promise、HTTP、Webpack等方面,旨在帮助开发者准备面试,提升技能。
摘要由CSDN通过智能技术生成

目录

1.js的数据类型

2.什么是闭包,闭包的应用场景,闭包的缺点

3.什么是原型,什么是原型链

4.JS如果实现继承

5. Call,apply的区别

6. new关键字做了什么?

7. 浅拷贝

8. 深拷贝

9. js检测对象类型

10. 事件流

11. 事件代理

12. 数组去重

13. 异步和同步

14. 手写ajax

15.Promise

16. get与post区别

17. 什么是RESTful

18. 如何实现跨域

19. jsonp原理

20 .什么是MVVM(前后端分离)

21. 什么是MVC(前后不分离代码)

22. Vue2 响应式原理,(双向绑定的原理)

23. Vue3响应式原理

24. v-if与v-show的区别

25. computed与watch区别

26. 生命周期

27. 导航守卫

28. $router,和$route区别

29. 路由传参,子路由

30. 你封装过哪些组件(哪些插件)?

31. vuex 哪些组件

 32. 什么是vuex

33. vuex和全局变量区别

34. vuex mutations和action区别

35. 哪些数据你都存储在vuex

36.axios封装哪些常用功能

37. 组件传参

38. nextTick作用(全局方法)

39. vue2 有没有遇到数据更新视图不更新?

40. 在vue-for循环中为什么时候key

41. 什么是虚拟dom,优点

42. 箭头函数与普通函数的区别?

43. this指向问题

44. 变量提升

45. let 与var的区别

 

46.小程序

47.获取浏览器宽高

48.clientWidth offsetWidth, scrollWidth区别

49.scrolleft  offsetLeft

50.事件event.pageX ,event.pageY,clientX,clienX

51. 手机端事件

52. 获取元素的边界

53. JQuery相关

54.html5标签有哪些

55. 行内标签 ,块标签,行内块

56.行内与块区别

57. 如果写个三角形

58. css哪些属性可以继承

59. css如何垂直居中

60. css权重

61.  BFC

62. px pt rem em rpx

63. 清除浮动

64. 定位区别

65. webpack 中的插件plugin与加载器loader的区别

66. webpack有哪些优化方式

67. webpack 切换环境,区分环境,跨平台传递参数

68.不用vue脚手架自己能搭建项目吗

69.webpack核心概念

70.get 与post 请求

71.闭包

72.如何解决异步

73.如何实现继承

74.事件流

75.如何事件先冒泡后捕获

76.事件委托,代理

77.图片懒加载与预加载

78.mouseover与mouserenter区别

79.js的new操作符做了哪些事情

81. tcp 三次握手,一句话概括

82. TCP 和 UDP 的区别

83. webscoket

84. HTTP 请求的方式,HEAD 方式与OPTIONS

85. 一个图片 url 访问后直接下载怎样实现?

86. web Quality(无障碍)

87. 什么是 Bom? Bom 是浏览器对象。有哪些常用的 Bom 属性呢?

88. 说一下 http2.0

89. iframe 是什么?有什么缺点?

90.Doctype 作用?严格模式与混杂模式如何区分?它们有何意义?

91.Cookie 如何防范 XSS 攻击

92.Cookie 和 session 的区别

93.一句话概括 RESTFUL

94.什么是ajax?

95.什么是浏览器同源策略?

96.什么是跨域,跨域的常见方式有哪些?

97.jsonp的原理是?

98.$router 有哪些方法 (5个)

99. 写一个produce带参数路由配置

100. 导航组件内部守卫

101. sessionStore有哪些方法(3个)localStorage也具有这些方法

102. 使用axios的get请求请求/list.php   请求参数是 {name:"mumu",age:18}

    并在控制台输出请求内容(2种get方法)

103. 使用axios的post请求请求/login.php 请求参数是 {name:"mumu",age:18}

    并在控制台输出请求内容(2种post方法)

104. 什么是浏览器的同源策略?

105. 跨域的方式有哪些?

106. jsonp的原理有哪些?(script)

107. 如何全局挂载axios


1.js的数据类型

基础数据类型、值类型

数据类型

typeof 值

举例

String字符串

string

“abc”,'abc',`def`

Number数组

number

123,-12.5

Boolean布尔

boolean

true,false

undefined未定义

undefined

undefined

Symbol符号

symbol

symbol

null 空

object

null

复杂数据类型,引用类型

数据类型

typeof

举例

Array数组

object

[1] 

Object对象

object  

{}

function函数class类

function

function(){}

Map图

object

new Map([[]])

Set集合

object

new Set([])

weakMap,weakSet

object

Date,Math,

object

  1. 值类型与引用类型的区别

值类型 key和value都存储在栈中。

引用类型栈中存内存地址,真正值存储在堆中。

// 值类型

var a = 15;

var b = a;

b = 20;

// b与相互不影响

 一个引用类型堆中的值可以被多个变量引用,修改其中一个会影响到其它。

2.什么是闭包,闭包的应用场景,闭包的缺点

闭包就是函数嵌套函数,函数作为参数被传入,作为返回值被返回。

闭包作用:

  1. 形成局部作用域,
  2. 在函数外部可以访问函数内部的局部变量

闭包的缺点

被闭包引用的变量不会被js垃圾回收机制销毁,会常驻内存,使用不当容易造成内存崩溃

3.什么是原型,什么是原型链

每个构造函数(class)都有一个显示的原型prototype

每个实例实例对象都有个隐私原型__proto__

实例的隐式原型__proto__等于其构造函数的显示原型protype

当查找一个对象的属性或方法时先在实例上查找,找不这沿着__proto__向上逐级查找

我们把__proto__的__proto__形成的链条关系成为原型链

作用:1 原型链实现了js继承,2.原型可以给构造函数创建的实例添加公用方法

4.JS如果实现继承

  1. class使用extends关键字实现继承
  2. 通过原型链实现继承,                           ·                                                     

5. Call,apply的区别

call与apply都是执行一个函数,用第一个参数冒充函数的this

apply参数用的是数组形式

6. new关键字做了什么?

  1. 创建空对象
  2. call执行构造函数并传入空对象作为this
  3. 指定空对象的构造函数

7. 浅拷贝

  1. Object.assign(A,B)
  2. for in遍历拷贝
  3. {...A}对象扩展

8. 深拷贝

        1.转字符串

        2.递归

9. js检测对象类型

typeof :引用类型除function都返回 object

instance :是某个函数的实例,在原型链有该构造函返回ture

最准确:Object.prototype.toString.call(obj).slice(8,-1)

constructor, Array.isArray()

10. 事件流

冒泡流:事件由最具体的元素响应然后组件冒泡到最不具体的元素(html)

捕获流:从最不具体的元素捕获事件

开启捕获 addEventListenter第三个参数 true

阻止事件冒泡:e.stopPropagation()

11. 事件代理

把事件注册到多个元素共有的父元素上,通过事件的冒泡机制 响应事件

作用:动态添加的元素也可以响应事件

12. 数组去重

1.set去重

var arr2 = [...new Set(arr1)]

2.filter过滤

var arr2 = arr1.filter((item,index)=>arr1.indexOf(item)===inmmdex)

13. 异步和同步

同步是按顺序执行,会阻塞代码

异步非阻塞式执行代码

异步方法:回调函数,Promise,订阅发布模式,事件响应,aync和awiat

14. 手写ajax

ajax核心是通过XMLHttpRequest(xhr) 与服务器异步交换数据,实现前端刷新更新视图

 

15.Promise

Promise 实现异步操作,解决回调函数层级过多形成的回调地狱问题

Promise resolve与reject状态发送改变不能更改

 Promise.reject()

Promise.all() 多个promise多完成才返回结果

Promise.race() 多个promise执行返回最快的一个

你在哪些地方用到promise

  1. 定义api请求接口
  2. 自定义jsonp用到
  3. 弹框插件等待用户确定则resolve
  4. 封装actions 用sync装饰 await实现异步

(等待,网络,等待用户确定的)(异步操作都会用到promise)

16. get与post区别

get 获取数据

post 新增,修改,删除

put 修改

delete 删除

get 有缓存的,可以收藏书签,方向,数据量2k

post 没有缓存,理论上没有大小限制

17. 什么是RESTful

RESTful是接口的设计风格

每一个URI地址都是一个资源

使用get获取,post新增,put修改,delete方法删除

18. 如何实现跨域

  1. jsonp
  2. 后端响应头允许
  3. 代理

无论哪种跨越都需要后端支持

19. jsonp原理

利用了script标签src没有同源限制。

后端返回的是方法名+()+数据格式  fun(data)

前端提前与定义这个方法就能获取数据

 

20 .什么是MVVM(前后端分离)

M:model 模式存储数据

V:view 显示内容(html)

VM viewModel视图模块 连接视图与model模型 (

当model数据发生变化时候通过VM可以监听变化更新视图

当view视图发变化时候通过VM可以监听变化自动更新model数据

21. 什么是MVC(前后不分离代码)

M 模型

v 视图

c 控制器

后端软件的设计思维:把视图V和模型M通过C控制实现分类

mvc(有利于SEO)

前端写好视图 交给后端 后端经过编程 生成 html 发送给浏览器(客户端)

mvvm(有利于开发))

后端写好接口,前端请求接口数据+定义视图 ,在浏览器(客户端)渲染html

22. Vue2 响应式原理,(双向绑定的原理)

通过Object.defineProperty劫持对象的getter与setter

通过订阅与发布者模式结合

er观察者来连接视图与数据

当数据发生变化时候通知说要订阅该数据的订阅者更新

23. Vue3响应式原理

ES6新增的 proxy代理实现的

vue3 与Vue2的区别

  1. 响应式原理不同:Object.defineProperty和Proxy
  2. 启动方式不用:

//vue2

new Vue({

    store,

    router,

    render:h=>h(App)

}).$mount("#app")

// vue3

createApp(App).use(store).use(router).mount("#app")

  1. 全局挂载方法

  1. Vue3 增加了setup 组合式api

24. v-if与v-show的区别

都可以隐藏节点

v-show通过css方式隐藏

v-if 直接移除dom节点

频繁切换显示与隐藏用v-show反之用v-if

25. computed与watch区别

computed有缓存,watch没有

conputed从现有数据计算出新的数据,watch是监听数据变化执行handler回调函数

computed 多对一,watch一对多

26. 生命周期

option选项api :创建前后,挂载前后,更新前后,销毁前后

setup中:没有创建前后

created 有this,发起ajax请求,监听事件,定时器

setup 没有this  ,发起ajax请求,监听事件,定时器

mounted 可以操做dom

beforeDestroyed ||onUnmount  移除定时器,移除事件监听

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

让我打个盹

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值