当前位置: 首页 > news >正文

前端面试题09

74、定义类的方法有哪些

在JavaScript中,定义类的方法有以下几种方式:

1.使用函数声明:

function MyClass() {// constructor
}
MyClass.prototype.methodName = function() {// method body
};

2.使用类的方法缩写(ES6引入):

class MyClass {methodName() {// method body}
}

3.使用对象字面量赋值:

const MyClass = {methodName: function() {// method body}
};

4.使用ES6箭头函数:

class MyClass {methodName = () => {// method body}
}

无论使用哪种方式,类的方法都可以在类的实例对象上被调用。使用this关键字可以在方法中引用当前实例的属性和方法。 这些方法定义方式的选择取决于代码结构和个人偏好。在ES6中,推荐使用类的方法缩写方式,因为它更简洁和清晰,支持更多的语法特性。

75、Object.is()和==、===之间的区别

Object.is(value1, value2):

  • Object.is() 是一个静态方法,用于判断两个值是否严格相等。

  • 它的比较行为与 === 运算符一致,只有在两个值严格相等时返回 true,否则返回 false

  • === 运算符不同的是,Object.is() 对于 NaN 和 -0 有特殊处理,将它们视为不相等。

  • 示例:

    Object.is(3, 3);      // true
    Object.is('foo', 'foo');    // true
    Object.is(true, true);      // true
    Object.is(undefined, undefined);  // true
    Object.is(null, undefined);     // false
    Object.is(0, -0);       // false
    Object.is(NaN, NaN);      // false
    

== 运算符(相等运算符):

  • == 运算符用于将两个操作数进行比较,如果它们的值相等,返回 true,否则返回 false

  • 在进行比较之前,会进行类型转换,使得两个操作数具有相同的类型。

  • 进行比较时,会遵循一些特定的规则(类型转换规则)。

  • 例子:

    1 == 1;          // true
    '1' == 1;        // true
    0 == false;      // true
    null == undefined;  // true
    NaN == NaN;      // false
    

=== 运算符(严格相等运算符):

  • === 运算符用于比较两个操作数的值和类型是否完全相等,若完全相等,则返回 true,否则返回 false

  • 不进行类型转换。

  • 示例:

    1 === 1;                // true
    '1' === 1;              // false
    0 === false;            // false
    null === undefined;     // false
    0 === -0;				// true
    NaN === NaN;            // false
    

综上所述,Object.is() 是严格相等运算符的一种更严格的版本,主要区别在于对 0 和 -0 值的处理方式。而 == 运算符则会进行类型转换,再进行比较。最好的实践是在大多数情况下使用 === 运算符进行值的比较,只在需要考虑特殊情况时使用 Object.is()

76、Vue中虚拟DOM的作用

  1. 提高渲染效率:虚拟DOM可以通过diff算法来比较前后两个虚拟DOM树的差异,只对差异部分进行实际的DOM更新操作,避免对整个DOM树进行重新渲染,从而提高了页面的渲染效率。
  2. 简化开发:虚拟DOM将真实DOM的操作抽象成跨平台、可复用的JavaScript对象,使得开发者可以使用组件化的方式来构建应用,将UI拆分为多个可组合的组件,简化了应用的开发和维护。
  3. 跨平台支持:由于虚拟DOM是基于JavaScript对象的抽象结构,它可以支持跨不同平台的开发,比如在浏览器、桌面应用和移动端应用等平台上使用相同的组件和代码逻辑进行开发。
  4. 高效的跟踪和更新:Vue的响应式系统结合虚拟DOM可以实现高效的状态追踪和更新。当应用的状态发生变化时,Vue会通过虚拟DOM的diff算法计算出需要更新的最小DOM操作,只对需要更新的部分进行实际的DOM更新,从而提高了应用的性能。

虚拟DOM技术使得Vue可以在保持开发效率和性能之间取得平衡,提供了一个高效、组件化的方式来构建交互式的前端应用。它在Vue中扮演了关键的角色,使得开发者可以更好地管理和控制应用的状态和渲染过程。

77、CSS过渡属性和动画的区别

  1. 触发方式:过渡属性是响应状态改变的,只有当某个属性的值发生变化时,过渡效果才会触发。而动画是无需响应状态的改变,可以通过添加类名或使用JavaScript来触发动画效果。
  2. 使用场景:过渡属性适用于简单的状态改变,如鼠标悬停、元素出现/消失等,常用于实现一些平滑的过渡效果。动画则适用于更复杂、更精细的动画效果,可以实现更高级的交互和动态效果。
  3. 配置灵活性:动画相对于过渡属性在配置灵活性上更强大。使用关键帧(Keyframes)规则,可以在动画序列中定义多个阶段,并设置每个阶段所需的样式属性。这使得动画可以实现更复杂的变化和多样化的效果。
  4. 控制和自定义:过渡属性的控制比较简单,主要通过定义过渡属性和过渡的时间曲线来控制过渡的效果。而动画可以通过JavaScript控制动画的播放、暂停、重复等行为,并通过CSS提供的其他属性(如animation-fill-mode、animation-iteration-count等)进行自定义。

总结来说,过渡属性适用于简单的状态改变,并且控制和配置相对简单,可以实现平滑的过渡效果。而动画更适用于复杂的、精细的动态效果,可以通过关键帧规则和JavaScript控制,实现更丰富多样的动画效果。在实际开发中,可以根据需求来选择使用过渡属性还是动画来实现相应的动画效果。

78、让一段JavaScript代码异步执行

1、使用setTimeout函数:setTimeout函数可以在指定的时间间隔后异步执行指定的代码。你可以将你想要异步执行的代码包装在一个回调函数内,然后使用setTimeout来设置一个延迟的时间。

setTimeout(function() {// 在这里编写你想要异步执行的代码
}, 0);

使用setTimeout的这种方式可以立即将代码放入事件循环队列中,以便在其他同步代码执行完成后被执行。

2、使用Promise对象:Promise对象提供了一种更优雅的方式来处理异步操作。你可以创建一个Promise对象并在其中定义异步操作的逻辑。在异步操作完成后,调用resolve函数来标志操作成功并传递结果,或调用reject函数来标志操作失败并传递错误信息。

new Promise(function(resolve, reject) {// 异步操作的逻辑// 在操作成功后,调用 resolve(value)// 在操作失败后,调用 reject(error)
}).then(function(result) {// 在操作成功后的处理逻辑
}).catch(function(error) {// 在操作失败后的处理逻辑
});

你可以在Promise对象的then方法中处理成功的逻辑,在catch方法中处理失败的逻辑。

3、使用async/awaitasync/await是一种更简洁的处理异步操作的方法,它基于Promise对象。你可以将要执行的异步代码放在一个async函数中,然后使用await关键字来等待异步操作的完成。

async function asyncFunction() {await asyncOperation();  // 异步操作// 执行其他的代码
}

在使用await关键字时,它会暂停async函数的执行,直到异步操作完成并返回结果,然后继续执行之后的代码。

79、单页应用程序首屏优化有哪些方法

  1. 按需加载:将页面资源(如 JavaScript、CSS、图片等)进行按需加载,而不是一次性加载所有资源。可以使用异步加载、懒加载等技术,并优化资源的加载顺序,保证先加载必要的资源,再加载其他次要的资源。
  2. 代码分割:将应用程序的代码拆分成多个模块,按需加载模块,可以使用工具如Webpack等进行代码分割。这样可以减少首屏需要加载的代码量,提高页面渲染速度。
  3. 图片优化:使用适当的图片格式、压缩图片大小,减少网络传输的数据量。可以使用工具如ImageOptim、TinyPNG等进行图片优化,同时,可以使用懒加载技术(如LazyLoad)延迟加载图片,减少首屏需要加载的图片数量。
  4. 预渲染:对于一些静态内容不经常变化的页面,可以使用预渲染技术,在服务器端生成好首屏内容,并将其作为静态HTML文件返回给客户端,从而加快页面加载速度。
  5. 缓存策略:合理利用浏览器缓存和服务器缓存,将可能重复请求的资源缓存起来,减少请求次数和网络传输时间。可以使用HTTP缓存头,如Cache-Control、Expires等,设置合理的缓存时间。
  6. 代码优化:减少不必要的重绘和重排,避免过多的DOM操作,优化JavaScript代码,减少CPU计算时间。使用工具如Chrome DevTools进行性能分析,找出性能瓶颈并进行优化。
  7. 服务器优化:确保服务器的响应速度快,减少网络延迟。可以使用CDN(内容分发网络)来加速静态资源的加载,将资源分布到离用户更近的服务器上。
  8. 骨架屏:在页面加载过程中,可以使用骨架屏技术展示一个简单的页面结构,提供视觉反馈,让用户感知到页面正在加载,从而减少等待时间的焦虑感。

80、Vue中如何实现单页应用程序的页面缓存

1、使用组件:Vue提供了一个名为keep-alive的特殊组件,可用于缓存动态组件的状态。

<router-view v-slot="{ Component }"><keep-alive><component :is="Component"></component></keep-alive>
</router-view>

通过将组件包裹在周围,你可以缓存通过Vue Router渲染的组件。这样,当你在不同的页面切换时,组件的状态将被保留,而不会重新加载。

2、使用$route.meta属性:在路由配置中,可以为每个路由定义一个meta对象,用于存储一些自定义数据。你可以利用该属性来判断是否需要缓存页面。

const router = new VueRouter({routes: [{path: '/home',component: Home,meta: { keepAlive: true // 需要缓存}},{path: '/about',component: About,meta: { keepAlive: false // 不需要缓存}}]
})

然后,你可以在页面组件中通过$route.meta.keepAlive属性来决定是否缓存该页面。

3、使用activated和deactivated生命周期钩子:如果某个页面经常需要刷新或者不适合使用组件,你可以使用组件的activated和deactivated生命周期钩子来手动处理页面的缓存。

export default {activated() {// 页面被激活时触发// 在这里可以加载数据或执行其他操作},deactivated() {// 页面失去激活状态时触发// 在这里可以清除数据或执行其他操作}
}

当页面切换时,activated和deactivated钩子会被依次触发,你可以在这里处理缓存逻辑。

相关文章:

前端面试题09

74、定义类的方法有哪些 在JavaScript中&#xff0c;定义类的方法有以下几种方式&#xff1a; 1.使用函数声明&#xff1a; function MyClass() {// constructor } MyClass.prototype.methodName function() {// method body };2.使用类的方法缩写&#xff08;ES6引入&…...

网站更换IP的四大注意事项

1.对网站当中的数据进行备份 网站更换IP时可以将页面的数据库文件和站点文件通过下载工具在本地完成备份。 2.更换解析域名 从站点域名管理后台当中更换域名地址&#xff0c;改为新的IP地址。 3.确保IP安全 在用户更换IP前一定要确定IP是否安全&#xff0c;一旦IP存在不良…...

策略模式与简单工厂模式:终结if-else混乱,让代码更清爽

阅读建议 嗨&#xff0c;伙计&#xff01;刷到这篇文章咱们就是有缘人&#xff0c;在阅读这篇文章前我有一些建议&#xff1a; 本篇文章大概4500多字&#xff0c;预计阅读时间长需要5分钟。本篇文章的实战性、理论性较强&#xff0c;是一篇质量分数较高的技术干货文章&#x…...

TCP三次握手过程

什么是TCP tcp是一个面向连接的、可靠的、基于字节流的传输层通信协议 面向连接&#xff1a;TCP连接是一对一的&#xff0c;不能实现一对多或多对一&#xff0c;TCP在通信前要首先建立连接&#xff0c;连接成功后才能开始进行通信可靠的&#xff1a;TCP连接要保证通信过程的可靠…...

04-配置远程仓库的SSH免密登陆

配置SSH免密登录 配置步骤 创建好的远程仓库也可以使用SSH的方式进行访问,但如果没有配置公钥会有警告 第一步: 删除用户家目录下的.ssh目录,如果没有该目录或者该目录下已经有密钥了就不用执行该操作 #进入当前用户的家目录,删除.ssh 目录 LayneLAPTOP-Layne MINGW64 ~ $ r…...

【中文编码】利用bert-base-chinese中的Tokenizer实现中文编码嵌入

最近接触文本处理&#xff0c;查询了一些资料&#xff0c;记录一下中文文本编码的处理方法吧。   先下载模型和词表&#xff1a;bert-base-chinese镜像下载   如下图示&#xff0c;下载好的以下文件均存放在 bert-base-chinese 文件夹下    1. 词编码嵌入简介 按我通俗的…...

一文解决msxml3.dll文件缺失问题,快速修复msxml3.dll

在了解问题之前&#xff0c;我们必须首先清楚msxml3.dll到底是什么。DLL&#xff08;Dynamic Link Libraries&#xff09;文件是Windows操作系统使用的一个重要组成部分&#xff0c;用于存储执行特定操作或任务的代码和数据。msxml3.dll为Windows系统提供处理XML文档的功能。如…...

《React 知识点》第一篇 大括号使用{}

简介 大括号 " {} "可以用于包裹JavaScript的表达式或语句。以便在jsx中动态生成内容。 插入变量与表达式 function expressionTest() {const name "变量测试";return (<p><div>{name}</div><div>表达式 210 {2 100}</div…...

kafka入门(二): 位移提交

位移提交&#xff1a; Kafka的每条消息都有唯一的 offset&#xff0c; 用来表示消息在分区中对应的位置。有的也称之为 “偏移量”。 消费者每次在 poll() 拉取消息&#xff0c;它要返回的是还没有消费过的消息集&#xff0c; 因此&#xff0c;需要记录上一次消费时的消费位…...

PG时间计算

PG数据库&#xff0c;时间计算使用场景总结 日期之差 --**获取秒差** SELECT round(date_part(epoch, TIMESTAMP 2019-05-05 12:11:20 - TIMESTAMP 2019-05-05 10:10:10)); --**获取分钟差** SELECT round(date_part(epoch, TIMESTAMP 2019-05-05 12:11:20 - TIMESTAMP 20…...

基于51单片机的交通灯_可调时间_夜间+紧急模式

51单片机交通灯 1 讲解视频&#xff1a;2 功能要求3 仿真图&#xff1a;4 原理图PCB5 实物图6 程序设计&#xff1a;7 设计报告8 资料清单&#xff08;提供资料清单所有文件&#xff09;&#xff1a;设计资料下载链接&#xff1a; 51单片机简易交通灯_可调时间_夜间紧急 仿真代…...

网络通信原理,进制转化总结

来源&#xff0c;做个笔记&#xff0c;讲的还蛮清楚通信原理-2.5 数据封装与传输05_哔哩哔哩_bilibili ip地址范围...

西南科技大学(数据结构A)期末自测练习三

一、填空题&#xff08;每空1分&#xff0c;共10分&#xff09; 1、为解决计算机主机与打印机之间速度不匹配的问题&#xff0c;通常设置一个打印数据缓冲区。主机将要输出的数据依次写入缓冲区&#xff0c;打印机则依次从缓冲区中取出数据&#xff0c;则该换缓冲区的逻辑结构…...

【halcon】裁剪

前言 目前我遇到的裁剪相关的函数都是以clip打头的函数。一共4个&#xff1a; clip_end_points_contours_xldclip_contours_xldclip_regionclip_region_rel 前面两个是对轮廓的裁剪。 后面是对区域的裁剪。 裁剪轮廓的两端 clip_end_points_contours_xld 用于实现裁剪XLD…...

vue+less+style-resources-loader 配置全局颜色变量

全局统一样式后&#xff0c;可配置vue.config.js实现全局颜色变量&#xff0c;方便在编写时使用统一风格的色彩 一、新建global.less 二、下载安装style-resources-loader npm i style-resources-loader --save-dev三、在vue.config.js中进行配置 module.exports {pluginOpt…...

第二次量子化

专栏目录: 高质量文章导航-持续更新中 前置复盘: 玻色子和费米子: 首先,我们希望把描述单粒子态的量子力学推广到全同多粒子体系。我们的做法是从单粒子态的希尔伯特空间(Hilbert Space)出发,构造全同多粒子态的态空间——福克空间(Fock Space),它实际上就是无穷个…...

(三)Pytorch快速搭建卷积神经网络模型实现手写数字识别(代码+详细注解)

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言Q1&#xff1a;卷积网络和传统网络的区别Q2:卷积神经网络的架构Q3:卷积神经网络中的参数共享&#xff0c;也是比传统网络的优势所在4、 具体的实现代码网络搭建…...

【代码】多种调度模式下的光储电站经济性最优 储能容量配置分析matlab/yalmip

程序名称&#xff1a;多种调度模式下的光储电站经济性最优储能容量配置分析 实现平台&#xff1a;matlab-yalmip-cplex/gurobi 代码简介&#xff1a;代码主要做的是一个光储电站经济最优储能容量配置的问题&#xff0c;对光储电站中储能的容量进行优化&#xff0c;以实现经济…...

深度学习今年来经典模型优缺点总结,包括卷积、循环卷积、Transformer、LSTM、GANs等

文章目录 1、卷积神经网络&#xff08;Convolutional Neural Networks&#xff0c;CNN&#xff09;1.1 优点1.2 缺点1.3 应用场景1.4 网络图 2、循环神经网络&#xff08;Recurrent Neural Networks&#xff0c;RNNs&#xff09;2.1 优点2.2 缺点2.3 应用场景2.4 网络图 3、长短…...

ChatGPT成为“帮凶”:生成虚假数据集支持未知科学假设

ChatGPT 自发布以来&#xff0c;就成为了大家的好帮手&#xff0c;学生党和打工人更是每天都离不开。 然而这次好帮手 ChatGPT 却帮过头了&#xff0c;莫名奇妙的成为了“帮凶”&#xff0c;一位研究人员利用 ChatGPT 创建了虚假的数据集&#xff0c;用来支持未知的科学假设。…...

c#利用Forms.Timer定时检测Tcp连接状态

目的&#xff1a;本地创建客户端连接服务器端&#xff0c;如果连接正常显示连接正常如果连接异常显示连接异常。 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.T…...

空间注意力:改变我们理解图像的方式

空间注意力&#xff1a;改变我们理解图像的方式 欢迎来到深度学习和计算机视觉的新时代&#xff0c;在这里&#xff0c;空间注意力机制正改变着我们理解和处理图像的方式。本文将深入探讨空间注意力的概念&#xff0c;它如何工作&#xff0c;以及为什么它在现代图像处理技术中…...

【模型报错记录】‘PromptForGeneration‘ object has no attribute ‘can_generate‘

通过这个连接中的方法解决&#xff1a; “PromptForGeneration”对象没有属性“can_generate” 期刊 #277 thunlp/OpenPrompt GitHub的 问题描述&#xff1a;在使用model.generate() 的时候报错&#xff1a;PromptForGeneration object has no attribute can_generate 解决方法…...

mysql学习记录

关系型数据库&#xff1a;不是把所有的数据全部存储在一起&#xff0c;而是分类存储在一起。 常见的数据库 关系型&#xff1a;oracle大型收费,mysql小型免费。 sql语言&#xff08;操作数据库&#xff09; structured query language 结构化查询语言 1.DDL 数据定义语言 创建数…...

Hdoop学习笔记(HDP)-Part.11 安装Kerberos

目录 Part.01 关于HDP Part.02 核心组件原理 Part.03 资源规划 Part.04 基础环境配置 Part.05 Yum源配置 Part.06 安装OracleJDK Part.07 安装MySQL Part.08 部署Ambari集群 Part.09 安装OpenLDAP Part.10 创建集群 Part.11 安装Kerberos Part.12 安装HDFS Part.13 安装Ranger …...

浅谈UML的概念和模型之UML九种图

1、用例图&#xff08;use case diagrams&#xff09; 【概念】描述用户需求&#xff0c;从用户的角度描述系统的功能 【描述方式】椭圆表示某个用例&#xff1b;人形符号表示角色 【目的】帮组开发团队以一种可视化的方式理解系统的功能需求 【用例图】 2、静态图 类图&…...

杨志丰:OceanBase助力企业应对数据库转型深水区挑战

11 月 16 日&#xff0c;OceanBase 在北京顺利举办 2023 年度发布会&#xff0c;正式宣布&#xff1a;将持续践行“一体化”产品战略&#xff0c;为关键业务负载打造一体化数据库。OceanBase 产品总经理杨志丰发表了《助力企业应对数据库转型深水区挑战》主题演讲。 以下为演讲…...

版本控制系统Git学习笔记-Git分支操作

文章目录 概述一、Git分支简介1.1 基本概念1.2 创建分支1.3 分支切换1.4 删除分支 二、新建和合并分支2.1 工作流程示意图2.2 新建分支2.3 合并分支2.4 分支示例2.4.1 当前除了主分支&#xff0c;再次创建了两个分支2.4.2 先合并test1分支2.4.3 合并testbranch分支 2.5 解决合并…...

分布式系统中最基础的 CAP 理论及其应用

对于开发或设计分布式系统的架构师、工程师来说&#xff0c;CAP 是必须要掌握的基础理论&#xff0c;CAP 理论可以帮助架构师对系统设计中目标进行取舍&#xff0c;合理地规划系统拆分的维度。下面我们先讲讲分布式系统的特点。 分布式系统的特点 随着移动互联网的快速发展&a…...

计算机视觉(OpenCV+TensorFlow)

计算机视觉&#xff08;OpenCVTensorFlow&#xff09; 文章目录 计算机视觉&#xff08;OpenCVTensorFlow&#xff09;前言3.图像金字塔3.1 高斯金字塔3.2 拉普拉斯金字塔 4.图像轮廓图像边缘和图像轮廓的区别检测图像绘制边缘 5.轮廓近似外接矩形外接圆 6. 模板匹配6.1 什么是…...