2023Web前端面试题及答案(一)

2023-11-08

答案仅供参考,每人的理解不一样。

文章目录

1、简单说一说事件流原理

事件流:
(1)事件流是指页面 接收事件的顺序;
(2)假设页面中的元素都具备相同的事件,并且这些个元素之间是相互嵌套的
关系.
(3) 那么在触发一个元素的事件时候,会触发其他的元素;

 总结:事件流是描述的从页面接受事件的顺序,当几个都具
 有事件的元素层叠在一起的时候,那么你点击其中一个元素,
 并不是只有当前被点击的元素会触发事件,而层叠在你点击
 范围的所有元素都会触发事件。

事件流包括两种模式:
(1)事件冒泡:是指子元素先触发事件,父元素后触发事件; 从内向外
(2)事件捕获:是指父元素先触发,子元素后触发; 从外到内

事件捕获和事件冒泡是一个完全相反的行为!!!

2、CSS的引入方式有几种?link和@import方式有什么不同?

  • 使用HTML标签的style属性(行内式)
  • 使用style标签(内嵌式)
  • 使用link标签,引入外部CSS文件(链接式)
  • 使用@import引入CSS文件(导入式)

link和@import方式有什么不同:

1、从属关系区别

@import是 CSS 提供的语法规则,只有导入样式表的作用;link是HTML提供的标签,不仅可以加载 CSS 文件,还可以定义 RSS、rel 连接属性等。

2、加载顺序区别

加载页面时,link标签引入的 CSS 被同时加载;@import引入的 CSS 将在页面加载完毕后被加载。

3、兼容性区别

@import是 CSS2.1 才有的语法,故只可在 IE5+ 才能识别;link标签作为 HTML 元素,不存在兼容性问题。

4、DOM可控性区别

可以通过 JS 操作 DOM ,插入link标签来改变样式;由于 DOM 方法是基于文档的,无法使用@import的方式插入样式。

3、CSS的水平垂直居中实现方式

1、使用弹性布局

{

display: flex;
justify-content: center;
align-items: center;

}

2、使用绝对定位 + transform

{

position: absolute;

top: 50%;

left: 50%;

transform: translate(-50%, -50%);
}

3、使用绝对定位 + margin

{

position: absolute;

top: 0;

bottom: 0;

right: 0;

left: 0;

margin:auto;

}

4、typeof与instanceof区别

typeof的返回值是一个字符串,用来说明变量的数据类型;

instanceof的返回值是布尔值,用于判断一个变量是否属于某个对象的实例。

typeof 一般只能返回如下几个结果: number, boolean, string, function, object, undefined

5、什么是事件代理及优点

事件代理(也称事件委托)事件代理,俗地来讲,就是把⼀个元素响应事件 ( click 、 keydown ......)的函数委托到另⼀个元素;例如:不给每个子节点单独设置事件监听器,而是设置在其父节点上,然后利用冒泡原理设置每个子节点。

优点:

  • 减少整个⻚⾯所需的内存,提升整体性能
  • 动态绑定,减少重复⼯作

6、window.onload和$(document).ready区别

window.onload 方法是在网页中所有的元素(包括元素的所有关联文件)完全加载到浏览器后才执行,即 JavaScript 此时才可以访问网页中的任何元素。

 jQuery 中的 $(document).ready() 方法注册的事件处理程序,在 DOM 完全就绪时就可以被调用。只要 DOM 就绪就可以操作了,不需要等待所有图片资源下载完毕。

7、JS中数组去重方法

  • .利用Array.from(new Set(arr))去重
  • 利用includes去重
     
    //includes() 方法用来判断一个数组是否包含一个指定的值,如果是返回 true,否则false。
    let list = [ 8,6, 6, 7, 1, 2, 3, 4, 5, 6, 7, 8]
        let newList2 = []
        list.forEach((item) => {
            // 空数组newList2 不包含item为false ,取反为true 执行数组添加操作
            // 如果数组包含了 item为true 取反为false 不执行数组添加操作
            if (!newList2.includes(item)) {
                newList2.push(item)
            }
        })
        console.log('newList2', newList2);
  • 利用map去重
    //map数据结构是es6中新出的语法,其本质也是键值对,只是其键不局限于普通对象的字符串 
    let list = [3, 4, 4, 5, 5, 6, 6, 7, 1, 2, 3, 4]
        let newList3 = [];
        let map = new Map()
        list.forEach((item) => {
         // 如果map.has指定的item不存在,那么就设置key和value 这个item就是当前map里面不存在的key,把这个item添加到新数组
         // 如果下次出现重复的item,那么map.has(item等于ture 取反 !map.has(item)  不执行
            if (!map.has(item)) {
                map.set(item,ture)
                newList3.push(item)
            }
        })
        console.log('newList3', newList3);

8、描述Vue组件生命周期,并简述各个周期作用

beforeCreate:实例刚在内存中创建出来,还没有初始化 data和 methods,只包含一些自带额生命周期函数
created: 实例已经在内存中创建完成,此时data和methods已经创建完成
beforeMount: 此时已经完成了模版的编译,只是还没有渲染到界面中去
mounted: 模版已经渲染到了浏览器,创建阶段结束,即将进入运行阶段

beforeUpdate: 界面中的数据还是旧的,但是data数据已经更新,页面中和data还没有同步
中间处理过程(非生命周期,便于学习抽象化的中间处理过程):
先根据data中的数据,在内存中渲染出一个新的DOM,当新的DOM树更新之后,会重新渲染到真实的界面中去,从而实现了从
数据层(model)—》视图层(view)的转换
updated: 页面重新渲染完毕,页面中的数据和data保持一致

beforeDestroy: 执行该方法的时候,Vue的生命周期已经进入销毁阶段,但是实例上的各种数据还出于可用状态

destroyed: 组件已经全部销毁,Vue实例已经被销毁,Vue中的任何数据都不可用

9、Vue中data为什么是一个函数

Vue组件中,data选项为一个函数的原因是为了保证每个组件实例都拥有独立的数据副本。当一个组件被多次使用时,每个实例都需要拥有自己的数据,而不是共享相同的数据副本。

10、Vue中watch 和 computed 的区别

1、computed是计算属性;watch是监听,监听data中的数据变化。

2、computed支持缓存,当其依赖的属性的值发生变化时,计算属性会重新计算,反之,则使用缓存中的属性值;watch不支持缓存,当对应属性发生变化的时候,响应执行。

3、computed不支持异步,有异步操作时无法监听数据变化;watch支持异步操作。

4、computed第一次加载时就监听;watch默认第一次加载时不监听。

5、computed中的函数必须调用return;watch不是。

6、使用场景:

computed:一个属性受到多个属性影响,如:购物车商品结算。

watch:一个数据影响多条数据,如:搜索数据。  

11、vue-router 路由有几种模式,有什么区别?

  • Hash: 使用URL的hash值来作为路由。支持所有浏览器。

  • History: 以来HTML5 History API 和服务器配置

  • Abstract:支持所有javascript运行模式。如果发现没有浏览器的API,路由会自动强制进入这个模式。

区别

hash模式:

  • url路径会出现 # 字符

  • hash值不包括在 HTTP 请求中,它是交由前端路由处理,所以改变hash值时不会刷新页面,也不会向服务器发送请求

  • hash值的改变会触发hashchange事件

history模式:

  • 整个地址重新加载,可以保存历史记录,方便前进后退

  • 使用 HTML5 API(旧浏览器不支持)和 HTTP服务端配置,没有后台配置的话,页面刷新时会出现404

12、vue组件传参有哪些方式?分别适用哪种组件?

1、Props:通过在父组件中定义props属性,将数据传递给子组件。子组件通过props属性接收数据;父传子

2、$emit:通过在子组件中触发事件,将数据传递给父组件。父组件通过在子组件上监听事件,接收数据。子传父

3、通过Vuex状态管理传递数据:祖先组件和后代组件都可以通过Vuex来管理应用程序的状态,从而实现数据传递。

4、通过事件总线传递数据:可以在Vue实例中创建一个事件总线,然后在兄弟组件中分别触发和监听事件,从而实现数据传递。

5、通过共同的父组件传递数据:如果两个兄弟组件有共同的父组件,可以通过在父组件中定义数据,然后通过props属性分别传递给两个兄弟组件

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

2023Web前端面试题及答案(一) 的相关文章

随机推荐

  • BigDecimal 除法运算提示:java.lang.ArithmeticException: Non-terminating decimal expansion; no exact repres

    业务场景 今天在计算重点工程总数占比工程总数 百分比 的时候 遇到一个错误 java lang ArithmeticException Non terminating decimal expansion no exact repres 异常
  • lambda函数

    文章目录 一 定义 二 格式 一 定义 lambda函数是一种匿名函数 是一种通过单个语句生成函数的方式 其结果是返回值 使用lambda关键字定义 该关键字仅表达 我们声明一个匿名函数 的意思 二 格式 冒号前是参数 可以有多个 用逗号隔
  • flex-wrap 后内容高度被撑开

    问题 布局时出现换行后 高度异常 box height calc 100vh 100px background fff overflow auto padding 76px 0 0 17px display flex flex wrap w
  • MySQL中的锁

    数据库中的锁 锁分类 按锁的粒度划分 表级锁 行级锁 页级锁 按锁级别划分 共享锁 排它锁 意向锁 按加锁方式划分 自动锁 显示锁 按使用方式划分 乐观锁 悲观锁 MySQL中的行级锁 表级锁和页级锁 行级锁 行级锁分为共享锁和排他锁 行级
  • 经典小题目2(进制转换,递归真是个好东西啊!C语言)

    递归真是个好东西 进制转换 十进制 gt R进制 除基取余 倒序排列 1 十进制转二进制 十进制转二进制 void convert1 int n if n 0 return else convert1 n 2 printf d n 2 2
  • 【AI面试】CrossEntropy Loss 、Balanced Cross Entropy、 Dice Loss 和 Focal Loss 分类损失横评

    在实际任务中 数据的不均衡一直是深度学习领域一个不可忽略的问题 常说的长尾效应 说的就是这个问题 少而多的误差 最终造成的结果 是不容忽视的 长尾效应 在正态分布中 曲线中间凸起的是 头 两边相对平缓的部分叫做 尾 对于绝大部分的需求来说
  • 测试工程师面试之设计测试用例

    以下的问题答案 仅供参考 如小伙伴们有更好的答案 欢迎大家评论区留言 谢谢大家 测试工程师面试之设计测试用例 1 请说一说简单用户界面登陆过程都需要做哪些分析 2 请对此系统设计测试用例 一个系统 多个摄像头 抓拍车牌 识别车牌 上传网上
  • 【基于Proteus 8 Professional和Keil uVision5简单共阴极数码管点亮】

    1 前面的一些Keil uVision5环境搭建具体的操作我已经省略 可以参照我前面写的博客 2 Main c代码 include stm32f10x h uint16 t table 0x3f 0x06 0x5b 0x4f 0x66 0x
  • 模拟电路设计(13)--- 振荡器电路原理简介

    概述 所谓振荡器电路就是一种在没有外界输入信号的情况下能自行产生周期性交变信号输出的电子电路 可以作为信号源 定时源 能量变换电路 频谱变换电路等等 普遍应用于通信电子系统 振荡器的种类很多 按原理分 反馈振荡器和负阻振荡器 按输出频率分
  • JavaBean转有序的Json字符串

    前言 随着国密算法普及 接口json加签传输对字段顺序有要求 处理代码 public static void main String args throws IllegalAccessException User user new User
  • chatgpt配合xmind制作思维导图

    原理 xmind支持将markdown文件转化成思维导图的形式 提示词 我将提供以下文章 请帮我使用Xmind工具创建一个 的思维导图 其中包含多个主题和子主题 以及叶子节点 请你提供一些Markdown格式的文本 以便与Xmind兼容 在
  • Oracle监控的关键指标(一)

    先收集一些Oracle的关键指标 最近有空的话再考虑将一些比较有代表性的监控点进行指标化 指标化的数据在通过python脚本对进行性能上监控 最终部署在目前维护的oracle数据库上 0 找使用CPU多的用户session select a
  • WSL安装教程

    wsl安装教程 引言 前期准备工作 安装wsl 第一步 第二步 检测系统版本 第三步 确定虚拟机特性 第四步 下载Linux内核的更新包 第五步 设置WSL 2作为默认版本 第六步 选择Linux发行版本并设置Linux账号 小TIPS 引
  • CocoaPods导入第三方库,提示找不到头文件的解决方法

    最近一直在了解MVVM架构模式 也知道了ReactiveCocoa框架对MVVM实现的便利与优雅 但是CocoaPods导入ReactiveCocoa框架后 却出现一个问题 就是引入头文件的时候说找不到头文件 如下图 解决方法如下 1 找到
  • Fragment详解

    Fragment有自己的生命周期 Fragment依赖于Activity Fragment通过getActivity 可以获取所在的Activity Activity通过FragmentManager的findFragmentById 或f
  • QT5.15以及QT VS TOOL安装教程

    QT5 15以及QT VS TOOL安装教程 1 QT5 15下载安装教程 点击这个链接 https download qt io 在official release online installers目录下选择exe文件下载windows
  • vue重新进页面重新加载mounted或者created中的内容

    vue的项目中 如果再次进入当前页面需要重新加载mounted方法可以使用 activated 这个方法内就可以执行需要进入页面重新加载的方法来替代mounted或者created方法 这样就可以满足不重新加载页面就可以直接将方法重新执行一
  • 打印机错误0x00000bc4的解决办法

    共享打印机在使用过程中难免会出现一些问题 比如连接共享打印机错误 提示代码0x00000bc4 这该如何解决 共享打印机出现问题是件非常麻烦的事 下面就来看看小编整理的解决办法吧 Win11连接共享打印机错误0x00000bc4解决方法 1
  • RabbitMQ:work结构

    gt 只需要在消费者端 添加Qos能力以及更改为手动ack即可让消费者 根据自己的能力去消费指定的消息 而不是默认情况下由RabbitMQ平均分配了 生产者不变 正常发布消息到默认的exchange gt 消费者指定Qoa和手动ack 生产
  • 2023Web前端面试题及答案(一)

    答案仅供参考 每人的理解不一样 文章目录 1 简单说一说事件流原理 事件流 1 事件流是指页面 接收事件的顺序 2 假设页面中的元素都具备相同的事件 并且这些个元素之间是相互嵌套的 关系 3 那么在触发一个元素的事件时候 会触发其他的元素