前端面试题
共 8906字,需浏览 18分钟
·
2024-04-11 07:28
常用的伪元素有哪些?
说说盒模型?
标准盒模型:元素的宽度和高度只包括内容(content),不包括内边距(padding)、边框(border)和外边距(margin)。 IE盒模型:元素的宽度和高度包括内容(content)、内边距(padding)和边框(border),但不包括外边距(margin) Content box: 这个区域是用来显示内容,大小可以通过设置 width
和 height
。 Padding box: 包围在内容区域外部的空白区域;大小通过 padding
相关属性设置。 Border box: 边框盒包裹内容和内边距。大小通过 border
相关属性设置。 Margin box: 这是最外面的区域,是盒子和其他元素之间的空白区域。大小通过 margin
相关属性设置。 实现水平垂直居中的方式?
9.使用absolute绝对定位,配合translate 移动转换,实现水平垂直居中
移动端如何适配不同的设备?
1、媒体查询
2、百分比布局
3、弹性盒子布局
4、rem单位 + 动态的font-size
5、Viewport单位
css中的自适应单位有哪些?
使用px,结合Media Query进行阶梯式的适配; 使用%,按百分比自适应布局; 使用rem,结合html元素的font-size来根据屏幕宽度适配; 使用vw、vh,直接根据视口宽高适配。
本地储存有哪些,有什么区别?
存储大小:cookie数据大小不能超过4k,sessionStorage和localStorage虽然也有存储大小的限制,但比cookie大得多,可以达到5M或更大
有效时间:localStorage存储持久数据,浏览器关闭后数据不丢失除非主动删除数据;sessionStorage数据在当前浏览器窗口关闭后自动删除;cookie设置的cookie过期时间之前一直有效,即使窗口或浏览器关闭
数据与服务器之间的交互方式,cookie的数据会自动的传递到服务器,服务器端也可以写cookie到客户端;sessionStorage和localStorage不会自动把数据发给服务器,仅在本地保存
js的数据类型?如何判断数据类型?
其中基础类型包括:undefined,Null,Number,String,Boolean,Symbol,BigInt
引用类型:Object (其中Object又包括 Array,RegExp,Date,Math,Function)
为什么typeOf null是object?
在判断数据类型时,是根据机器码低位标识来判断的,而null的机器码标识为全0,而对象的机器码低位标识为000。所以typeof null的结果被误判为Object。
var,let,const的区别?
var的特点: 存在变量提升,一个变量可多次声明,后面的声明会覆盖前面的声明,在函数中使用var声明变量的时候,该变量是局部的,如果在函数内不使用var,该变量是全局的。
let的特点: 不存在变量提升,let声明变量前,该变量不能使用(暂时性死区),let命令所在的代码块内有效,let不允许在相同作用域中重复声明,注意是相同作用域,不同作用域有重复声明不会报错。
const的特点: const声明一个只读的变量,声明后,值就不能改变,const必须初始化,const并不是变量的值不能改动,而是变量指向的内存地址所保存的数据不得改动,let该有的特点const都有。
能用const的情况下尽量使用const,大多数情况使用let,避免使用var。
数组去重有哪些方法?
利用 ES6 Set 去重 利用 for 嵌套 for,然后 splice 去重 利用 indexOf 去重 利用递归去重
ES6新特性有哪些?
说一下防抖和节流?
如何实现深浅拷贝?
深拷贝则不会出现上述问题,引用数据类型,地址跟数据都会拷贝出来。
闭包是什么,用它解决过什么问题?
一个是可以读取函数内部的变量;
另一个就是让这些变量的值始终保存在内存中。
Ajax 请求的成功回调,事件绑定的回调方法, setTimeout 的延时回调,或者函数内部返回另一个匿名函数,这些都是闭包
说出你知道的数组方法?
1.shift 删除数组中的第一个元素
2.pop 删除数组中的最后一个元素
3.unshift 增加元素在数组的前面
4.push 增加元素在数组的后面
5.map 循环,并且返回新的数组
6.forEach 循环,遍历
7.filter 过滤,筛选出数组中的满足条件的,并且返回新的数组
8.concnt 合并数组
9.find 查找出第一个符合条件中的数组元素
10.findIndex 查找出第一个符合条件中的数组元素,所在的索引位置
11.flat 将多维数组转为一维数组
12.join将数组转为字符串
13.reverse 颠倒数组中的顺序
14.every检测数组中元素是否都是符合条件 === bollean
15.some检测数组中元素是否有满足条件的元素 === bollean
16.splice(start,n,添加元素) 开始位置 删除个数,添加元素
17.sort 排序
18.slice(start,end) 选中[start.end)之间的元素
19.indexOf 查找值所在的位置
20.includes 查看数组中是否存在此元素
哪些遍历方法会改变原数组?
sort(): sort() 方法会改变原数组,按照指定的排序方式对数组进行排序。
splice(): splice() 方法会改变原数组,通过删除或替换现有元素或者添加新元素来修改数组。
push() / pop() / shift() / unshift(): 这些方法在改变原数组的同时添加或删除元素。
说说this指向?
改变this指向的方法,有什么区别?
1、call,apply会调用函数,且改变函数内部this指向
2、call,apply传递参数不一样,apply必须以数组形式
3、bind不会调用函数,但会改变函数内部this指向
什么是跨域?如何解决?
当一个请求url的协议、域名、端口三者之间任意一个与当前页面url不同即为跨域 2.JSONP 是服务器与客户端跨源通信的常用方法。最大特点就是简单适用,兼容性好(兼容低版本IE),缺点是只支持get请求,不支持post请求。 2.CORS 是跨域资源分享(Cross-Origin Resource Sharing)的缩写。它是 W3C 标准,属于跨源 AJAX 请求的根本解决方法。 3.反向代理 js引入为什么放在底部?
因为浏览器加载完 JS 文件就会去执行,这时候如果 JS 里面有对 DOM 的操作的话,DOM 可能还未加载完,可能就会出错。
因为浏览器渲染HTML文件是从上往下渲染的。
mvc和mvvm的理解?
MVC思想 :Controller负责将Model的数据用View显示出来。
MVVM由Model,View,ViewModel三部分构成。
Model 和 View 并无直接关联,而是通过 ViewModel 来进行交互的(即双向数据绑定)
Model 和 ViewModel之间有着双向数据绑定的联系。View的变化可以引起Model的变化,Model的变化也可以引起View变化(类似于浅拷贝)。ViewModel是View和Model层的桥梁,数据会绑定到viewModel层并自动将数据渲染到页面中,视图变化的时候会通知viewModel层更新数据。
vue的双向绑定原理?
vue的双向绑定,即数据与视图的响应式设计。具体表现为:View的改变能实时让Model发生变化,而Model的变化也能实时更新View。
Vue 数据双向绑定原理是通过 数据劫持 + 发布者-订阅者模式 的方式来实现的,首先是通过Object.defineProperty() 方法来劫持(监听)各属性的 getter、setter,并在当监听的属性发生变动时通知订阅者,是否需要更新,若更新就会执行对应的更新函数。
vue的生命周期有哪些,每个阶段做什么?
beforeCreat() 创建前 在new一个vue实例后,只有一些默认的生命周期钩子和默认事件,其他的东西都还没创建。在此生命周期执行的时候,data和methods中的数据都还没有初始化。不能在这个阶段使用data中的数据和methods中的方法
created()被创建 data 和 methods都已经被初始化好了,可以调用了
beforeMount() 挂载前 在内存中已经编译好了模板了,但是还没有挂载到页面中,此时,页面还是旧的
mounted()已挂载 Vue实例已经初始化完成了。此时组件脱离了创建阶段,进入到了运行阶段。如果我们想要通过插件操作页面上的DOM节点,最早可以在和这个阶段中进行
beforeupdate()更新前 页面中的显示的数据还是旧的,data中的数据是更新后的, 页面还没有和最新的数据保持同步
updated()更新 页面显示的数据和data中的数据已经保持同步了,都是最新的
beforeDestroy() 销毁前 Vue实例从运行阶段进入到了销毁阶段,这个时候上所有的 data 和 methods , 指令, 过滤器 ……都是处于可用状态。还没有真正被销毁
destroyed()被销毁 这个时候上所有的 data 和 methods , 指令, 过滤器 ……都是处于不可用状态。组件已经被销毁了。
v-if和v-show的区别?
当使用v-if时,元素是否渲染到DOM取决于表达式的值是否为真。如果表达式为假,元素将不会被渲染到DOM中。
当使用v-show时,元素始终会渲染到DOM中,但是通过CSS的display属性来控制元素的显示与隐藏。如果表达式为假,元素会被隐藏,但仍然占据着DOM空间。
vue2中data为什么是一个函数?
是为了防止多个组件实例对象之间共用一个data,产生数据污染。采用函数的形式,initData时会将其作为工厂函数都会返回全新data对象。
vue常用的指令有哪些?
v-for为什么需要key?
vuex有几个属性,作用是什么?
keep-alive是什么?
keep-alive 是 Vue 的内置组件,当它包裹动态组件时,会缓存不活动的组件实例,而不是销毁它们。和 transition 相似,keep-alive 是一个抽象组件:它自身不会渲染成一个 DOM 元素,也不会出现在父组件链中。
在组件切换过程中将状态保留在内存中 ,防止重复渲染DOM,减少加载时间及性能消耗,提高用户体验性。
vue的计算属性和监听属性有什么区别?
Vue中的计算属性和监听属性都可以用来监听数据的变化并做出相应的响应。它们的区别在于计算属性是根据依赖的数据动态计算得出的值,而监听属性是在数据变化时执行特定的回调函数。
vue中组件通讯有哪些方式?
1.props和events:父组件通过props向子组件传递数据,子组件通过events向父组件发送消息。
2.自定义事件
3.vuex
4.本地储存
5.事件总线
eventBus是什么?
在Vue中可以使用 EventBus 来作为沟通桥梁的概念,就像是所有组件共用相同的事件中心,可以向该中心注册发送事件或接收事件,所以组件都可以上下平行地通知其他组件。
vue2和3的区别?
多根节点
组合式API
Vue3 在组合式API(Composition API,下面展开)中使用生命周期钩子时需要先引入,而 Vue2 在选项API(Options API)中可以直接调用生命周期钩子
Vue3 响应式原理基础是 Proxy
TypeScript支持
打包优化
首屏加载优化有什么方法?
压缩和合并资源
图片优化懒加载
尽量减少CSS文件的大小 代码压缩、去除不必要的注释和空格等方式来减小JavaScript文件的大小。服务端渲染(SSR)
CDN加速
请求跨域中,服务器代理是什么原理?
代理前:客户端 -> 服务器
代理后:客户端 -> 代理服务器 -> 服务器
跨域只是浏览器和服务器之间存在,而服务器之间不存在跨域。
导入样式时,link和@import的区别?
vue中$nextTick的作用?
在下次 DOM 更新循环结束之后执行延迟回调。在修改数据之后立即使用这个方法,获取更新后的 DOM。
当数据更新了,在dom中渲染后,自动执行该函数,
vue的优点和缺点?
Vue的优点包括:- 简单易学
- 响应式数据绑定
- 组件化开发
- 轻量级
- 生态系统相对较小:相比于Angular和React,Vue的生态系统相对较小,可能会缺少一些插件和工具支持。
- 社区支持不如React:虽然Vue在国内有很好的社区支持,但在国际上还不如React那么活跃。
- 某些功能相对不完善:Vue在某些功能上可能不如React或Angular完善,需要开发者自行扩展或寻找第三方插件支持。
vuex保存的数据页面刷新会丢失怎么解决?
1.使用vuex-along
2.使用localStorage或者sessionStroage
vue中组件和插件的区别?
- 组件:组件就是把图形、非图形的各种逻辑均抽象为一个统一的概念(组件)来实现开发的模式,在 Vue 中每一个 .vue 结尾的文件都可以视为一个组件
- 插件:插件通常用来为 Vue 构造函数添加全局功能,比如 vue-router、VueX 都是插件
vue中常用的修饰符有哪些?
- .prevent:阻止默认行为
- .stop:阻止事件冒泡
- .once:只触发一次
- .capture:使用事件捕获模式
- .self:只有事件是由自身触发时才触发事件处理程序
- .passive:告诉浏览器不要阻止事件的默认行为
小程序打包超出2M怎么解决?
-
检查项目中是否有未使用的资源文件,将其删除或者优化。
-
使用小程序的分包功能,将部分功能或资源文件放入分包中,减少主包的大小。
-
压缩图片和视频等资源文件,减小文件体积。
-
使用代码压缩工具对代码进行压缩,减小代码体积。
-
使用懒加载或按需加载的方式加载资源文件,减少首次加载时的压力。
(以上面试题来自网络收集)
现在面试问的越来越趋向于项目经验,就问你之前的项目经历,解决过什么难点,不知道大家有没有感觉... 雪天前端10个内容
把在线网址打包APP(一看就会系列)2024-02-04把网页打包成app(简单)2024-01-31
前端CSS魔法2024-01-28
Vue新手引导插件2024-01-27
Vue3优秀的UI组件库(高颜值)2024-01-19
下载量超高的vscode AI插件2024-01-14
github 中文排行榜2024-01-12
来检测下你的vue水平2024-01-05
好用的截图工具2023-12-21
github访问不了?2023-12-19
如有帮助,求个在看,愿道友龙年财源滚滚,大吉大利,步步高升,龙腾万里!