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

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

文章目录

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属性分别传递给两个兄弟组件

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/132890.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Postman使用_接口导入导出

文章目录 Postman导入数据Collections导出数据Environments导出数据Postman导出所有数据 Postman导入数据 可以导入collections(接口集)、Environments(环境配置)通过分享的链接或导出的JSON文件导入数据(还可以从第三…

视频监控/安防监控/AI视频分析/边缘计算/TSINGSEE青犀AI算法智慧仓储解决方案

随着全球经济与科学技术的双重推动,我国的仓储管理已经进入了高速发展时期,物流仓储也由简单的储藏仓库向智能化仓储转变。TSINGSEE青犀AI智慧仓储解决方案是利用先进的信息技术和物联网技术来提高仓储管理效率、降低成本的一种仓储管理模式。 方案功能 …

家政服务预约小程序,推拿spa上门预约系统

家政服务预约小程序,用户直接发布需求下单,师傅入驻抢单派单,多商家入驻,上门预约服务流程清晰,适合家政公司或需要预约场景的团队公司使用,支持多种行业上门预约服务场景:家政保洁维修上门服务…

代码随想录--链表-反转链表

题意:反转一个单链表。 示例: 输入: 1->2->3->4->5->NULL 输出: 5->4->3->2->1->NULL 双指针 public class Main {public static class ListNode {int val;ListNode next;ListNode(int x) {val x;}}public ListNode reverseList(L…

Docker从认识到实践再到底层原理(五)|Docker镜像

前言 那么这里博主先安利一些干货满满的专栏了! 首先是博主的高质量博客的汇总,这个专栏里面的博客,都是博主最最用心写的一部分,干货满满,希望对大家有帮助。 高质量博客汇总 然后就是博主最近最花时间的一个专栏…

VisualStudio Code 支持C++11插件配置

问题 Visual Studio Code中的插件: Code Runner 支持运行C、C、Java、JS、PHP、Python等多种语言。 但是它不支持C11特性的一些使用,比如类似错误: binarySearch.cpp:26:17: error: non-aggregate type ‘vector’ cannot be initialized with an ini…

Qt For OpenHarmony

本文转载自 OpenHarmony TSC 官方微信公众号《峰会回顾第29期 | Qt For OpenHarmony 》 演讲嘉宾 | 蔡万苍 回顾整理 | 廖 涛 排版校对 | 李萍萍 嘉宾简介 蔡万苍,13 年 C/Qt 开发相关工作经验,曾任职 Qt 公司,担任技术支持、Qt 咨询师…

windows系统docker中将vue项目网站部署在nginx上

一、首先在windows系统上下载并安装docker,要下载windows版本 https://www.docker.com/products/docker-desktop/ PS:安装过程中需要WSL,我的是win11系统,直接提示了我安装就可以下一步了。其他windows系统版本我不知道是否需要单…

C++下标运算符详解

C++ 规定,下标运算符[ ]必须以成员函数的形式进行重载。该重载函数在类中的声明格式如下: 返回值类型 & operator[ ] (参数); const 返回值类型 & operator[ ] (参数) const; 使用第一种声明方式,[ ]不仅可以访问元素,还可以修改元素。使用第二种声明方式,[ ]只…

postgresql-通用表达式

postgresql-通用表达式 入门案例简单CTE递归 CTE案例1案例2 入门案例 -- 通用表达式 with t(n) as (select 2) select * from t;简单CTE WITH cte_name (col1, col2, ...) AS (cte_query_definition ) sql_statement;WITH 表示定义 CTE,因此 CTE 也称为 WITH 查询…

河北省图书馆典藏《乡村振兴振兴战略下传统村落文化旅游设计》许少辉八一新著

河北省图书馆典藏《乡村振兴振兴战略下传统村落文化旅游设计》许少辉八一新著

Nginx(动静分离、分配缓冲区、资源缓存、防盗链、资源压缩、IP黑白名单、大文件传输配置、跨域配置、高可用、性能优化)

Nginx,负载均衡,Http反向代理服务器,支持大部分协议,如TCP、UDP、SMTP、HTTPS 环境搭建 Nginx反向代理-负载均衡 首先通过SpringBootFreemarker快速搭建一个WEB项目:springboot-web-nginx,然后在该项目中&…

FastJSON将对象转JSON字符串引发的血案

问题:最近工作中需要将一个将近两百页的pdf的base64作为value转成JSON字符串,而代码中使用的方案就是JSONObject.toJSONString(obj); 而结果就是引发了OOM内存溢出。 翻阅源码找到一段关键点: 也就是说FastJSON内部设置了一个阈值&#xff…

C++模版基础

代码地址 gitgithub.com:CHENLitterWhite/CPPWheel.git 专栏介绍 本专栏会持续更新关于STL中的一些概念,会先带大家补充一些基本的概念,再慢慢去阅读STL源码中的需要用到的一些思想,有了一些基础之后,再手写一些STL代码。 (如果你…

深入了解MySQL中的JSON_ARRAYAGG和JSON_OBJECT函数

在MySQL数据库中,JSON格式的数据处理已经变得越来越常见。JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,它可以用来存储和表示结构化的数据。MySQL提供了一些功能强大的JSON函数,其中两个关键的函数是…

奶牛个体识别 奶牛身份识别

融合YOLOv5s与通道剪枝算法的奶牛轻量化个体识别方法 Light-weight recognition network for dairy cows based on the fusion of YOLOv5s and channel pruning algorithm 论文链接 知网链接 DOI链接 该文章讨论了奶牛花斑、光照条件、不同剪枝方法、不同剪枝率对准确率的影响…

类和对象(3)

文章目录 1.回顾上节2. 拷贝构造3. 运算符重载(非常重要)4. 赋值运算符重载 1.回顾上节 默认成员函数:我们不写,编译器自动生成。我们不写,编译器不会自动生成 默认生成构造和析构: 对于内置类型不做处理对…

PMP-项目规划过程组的重要性

一、什么是项目规划过程组 规划过程组包括明确项目全部范围、定义和优化目标,并为实现目标制定行动方案的一组过程。规划过程组中的过程制定项目管理计划的组成部分,以及用于执行项目的项目文件。取决于项目本身的性质,可能需要通过多轮反馈来…

使用阿里PAI DSW部署Stable Diffusion WebUI

进入到网址https://pai.console.aliyun.com/里边。 点击创建实例。 把实例名称填写好,选择GPU规格,然后选择实例名称是ecs.gn6v-c8g1.2xlarge。 选择stable-diffusion-webui-env:pytorch1.13-gpu-py310-cu117-ubuntu22.04,然后点击下一步。…

Python+requests编写的自动化测试项目

框架产生目的:公司走的是敏捷开发模式,编写这种框架是为了能够满足当前这种发展模式,用于前后端联调之前(后端开发完接口,前端还没有将业务处理完毕的时候)以及日后回归阶段,方便为自己腾出学(m…