首页 > 其他分享 >前端面试题

前端面试题

时间:2024-09-13 20:25:28浏览次数:1  
标签:__ 面试题 父类 属性 对象 前端 prototype 构造函数

for in 和for of的区别

for in 适用于可枚举属性,例如 对象、数组、字符串

for of 适用于可迭代对象,像Array、String

for in 能遍历自身的可枚举属性 && 原型上的可枚举属性

for of 一般只能遍历自身的可枚举属性

for in 得到的是key

for of 一般得到的是value

ES6之后版本新增特性(不全)

1.Array.prototype.includes:用于检查数组是否包含某个元素返回布尔值

2.**指数运算符,用于指数运算

3.String.prototype.padStart() 和 String.prototype.padEnd() 方法用于填充字符串

4.Object.values() 和 Object.entries():返回对象的所有值或键值对数组

5.Promise.finally():无论 Promise 是成功还是失败,都会执行。 

6.异步迭代器:允许使用 for await...of 循环来异步迭代 

7.Array.prototype.flat() 和 Array.prototype.flatMap():数组扁平化

8.String.prototype.trimStart() 和 String.prototype.trimEnd():分别用于删除字符串开头和结尾的空白符。

Set和Map

Setes6新增的数据结构,类似于数组,但是成员的值都是唯一的,没有重复的值,我们一般称为集合

Set.add()增加一个set成员;Set.delete()删除一个set成员;Set.has()判断set是否有该成员;Set.clear()清除

扩展运算符和Set 结构相结合实现数组或字符串去重

Map类型是键值对的有序列表,而键和值都可以是任意类型

Map本身是一个构造函数,用来生成 Map 数据结构

map.size属性返回 Map 结构的成员总数。

中断请求

 

axios拦截器  instance.interceptors.request.use;新版本推荐使用AbortController,终止请求用AbortController.abort();

 

ajax中断请求 XMLHttpRequest.abort()

原型与原型链

每一个类(构造函数)都有一个显示原型prototype(本质就是个对象)

每一个实例都有一个隐式原型__proto__

显式原型的prototype等于其创建的实例的隐式原型__proto__例如:var arr = []; arr.__proto__ === Array.prototype

查找对象实例的方法和属性时,先在自身找,找不到则沿着__proto__向上查找,我们把__proto__形成的链条关系称原型链

 

 

继承 

原型链继承:原理: 将父类的实例(new Person())作为子类的原型对象(Student.prototype)

1.子类的构造函数指向出现错误,需要手动修改 (Student.prototype.constructor = Student)重新指回原构造函数。

2.若父类中存在引用类型的属性,继承者实例们共享该引用属性,一个修改,其他继承者的该属性值也会跟随改变。

3.子类实例对象无法向父类构造函数传参。

构造函数继承原理:在子类构造函数调用父类构造函数,并使用call/apply修改父类构造函数的this指向 此种方式摒弃原型链继承存在的实例化时无法向父类传参的问题。

1.只能访问父类实例上的属性或方法,不能够访问父类原型对象上的属性方法。

2.子类实例对象身上会出现父类实例对象的属性方法的副本,这显然是没有必要的

es6类继承原理: 封装的class,创建类,并通过extends实现继承。 语法简单,易书写

vuex

Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式 + 库。它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化

State提供唯一的公共数据源,所有共享的数据统一放到store的state进行储存,相似与data,通过this.$store.state获取

mutations : 使用它来修改数据(类似于methods),通过this.$store.commit('方法名')提交mutations中的方法来更改状 态

getters: 类似于computed(计算属性,对现有的状态进行计算得到新的数据-------派生 )

actions: 发起异步请求,通过提交mutation来实现,可以包含异步操作,通过 this.$store.dispatch('方法名')分发action

modules: 模块拆分

优点:集中管理共享的数据,易于开发和后期维护;Vuex 的状态存储是响应式的,当 Vue 组件从 store中读取状态的时候,若 store 中的状态发生变化,能够触发响应式的渲染页面更新;

限定了一种可预测的方式改变数据, 避免大项目中, 数据不小心的污染

缺点:刷新浏览器,vuex中的state会重新变为初始状态 ;解决方案-插件 vuex-persistedstate

vue中为什么将数据定义在data里

集中保存有利于管理;data里的属性可以被组件中的其他模块访问;Vue的响应式系统需要监视组件的数据变化,只有data属性中的属性才会被监视。

data中的数据写在return中是因为不使用return包裹,数据是全局可见,容易造成污染,包裹后是当前组件可见。

因为vue组件可以复用,为了防止data被复用,data就被定义为了函数

vue3初始数据在setup中定义一个返回对象存放

深浅拷贝

浅拷贝:新对象与原始对象共享相同的内存地址,因此对其中一个对象进行更改会影响到另一个对象。浅拷贝仅复制对象的第一层结构,而不会递归复制嵌套的对象或数据

浅拷贝示例:扩展运算符;Object.assign();Array.concat() 方法

深拷贝:创建一个全新的对象或数据结构,其中包含原始对象完全独立的副本。新对象与原始对象具有不同的内存地址,因此彼此之间的更改是相互独立的。深拷贝会递归复制所有嵌套的对象或数据,确保整个对象及其子对象都被复制

深拷贝示例:JSON.parse(JSON.stringify());cloneDeep()

双向绑定

Vue数据双向绑定原理是通过数据劫持结合发布者-订阅者模式的方式来实现的,首先是对数据进行监听,然后当监听的属性发生变化时则告诉订阅者是否要更新,若更新就会执行对应的更新函数从而更新视图

通过Object.defineProperty()来劫持各个属性的setter, getter,在数据发生变动时通

知Vue实例,触发相应的​getter​和​setter​回调函数。

当把一个普通 Javascript 对象传给Vue 实例来作为它的 data 选项时, Vue 将遍历它的属性,用 Object.defineProperty 将

它们转为 ​getter/setter​。用户看不到 getter/setter,但是在内部它们让 Vue 追踪依赖,在属性被访问和修改时通知变化

首页白屏优化

1. 代码优化和压缩

2. 懒加载和按需加载

3. 预加载关键资源

4. 优化压缩图片和多媒体资源

5. 减少重定向和请求次数

6.适当使用缓存

标签:__,面试题,父类,属性,对象,前端,prototype,构造函数
From: https://www.cnblogs.com/g-undefined/p/18412776

相关文章

  • 小米嵌入式面试题目RTOS面试题目 嵌入式面试题目
    第一章-非RTOSbootloader工作流程MCU启动流程通信协议,SPIIICMCU怎么选型,STM32F1和F4有什么区别外部RAM和内部RAM区别,怎么分配外部总线和内部总线区别MCU上的固件,数据是怎么分配的MCU启动流程IAP是怎么升级的,突然断电怎么办挑了麦轮项目(因为大疆RM也是......
  • Java笔试面试题AI答之单元测试JUnit(4)
    文章目录19.简述JUnitorg.junit.TestSuite类的作用?1.组织测试类2.简化测试执行3.灵活配置测试环境4.嵌套测试套件注意事项20.在JUnit中@Test注释的作用和用法?作用用法21.简述Junit基础注解(@BeforeClass、@Before、@Test、@After、@AfterClass)?22.编写代......
  • 经典前端+后端+表头+表身的开发实战参考简易模板【珍藏】
    前端部分(Vue3+ElementPlus)1.修改MPS002HList.vue(主生产计划列表)a.添加查询表单在模板中添加查询表单,包含产品料号、品名、规格和年月的输入项。<template><div><!--查询表单--><el-form:inline="true":model="filters"class="demo-form-inline&qu......
  • 前端中的new函数:深入解析与实战应用
    前端中的new函数:深入解析与实战应用在JavaScript(以及许多其他面向对象编程语言中),new关键字扮演着创建对象实例的重要角色。它不仅用于调用构造函数来初始化新对象,还涉及一系列复杂的内部步骤来确保新创建的对象能够正确地与构造函数相关联。本文将深入探讨new函数的工作原......
  • 关于前端知识中框架概念部分的详细介绍
    1、为什么要学习流行框架?企业:为了提高效率,因为时间就是金钱。开发人员:提高了开发效率发展进程:JS=>JQuery=>模板引擎=>框架时代(Angular(2+)、React、Vue)好处:不用直接操作DOM,更多关注业务逻辑2、前端框架与库的区别?功能层面框架:提供全方位功能,是比较齐全的库:以提供AP......
  • 文心快码帮你解大厂面试题:设计一个秒杀系统,并明确指出关键点
    ......
  • 消息中间件面试题
    为什么使用消息队列?解耦、异步、削峰消息队列有什么优点和缺点?优点:解耦、异步、削峰缺点:系统的可用性降低、系统的复杂性提高了、一致性问题。Kafka的特性1.消息持久化2.高吞吐量3.扩展性4.多客户端支持5.KafkaStreams注意:当你不会说的时候,就围绕着kafka你知道的kafka......
  • 前端技术与中国古建筑的融合
       中国古建筑以其独特的建筑风格、文化内涵和精美设计著称,而前端技术在现代数字化时代中,提供了展现这些古老建筑的创新方式。通过前端技术的视觉呈现、交互设计和虚拟场景搭建,传统文化与现代科技得以完美融合,打破了时间和空间的界限,为更多人提供了接触和了解古建筑的机会。1......
  • 黑马面试集合(ArrayList, HashMap)篇笔记整理,结尾附Java的集合相关高频面试题及答案
    集合操作数据的特点-算法复杂度分析数据结构算法复杂度分析为什么要进行复杂度分析?指导编写性能更优的代码评判别人写代码的好坏时间复杂度分析时间复杂度分析:来评估代码的执行耗时的假设每行代码的执行耗时一样:1ms分析这段代码一共执行多少行?3n+3......
  • 了解 UNPKG:前端开发者的包管理利器
    在现代前端开发中,JavaScript包管理和模块化是至关重要的,而npm则是最流行的JavaScript包管理器之一。不过,随着前端项目复杂性的增加,有时候我们希望快速引入外部依赖,而无需本地安装和构建。此时,CDN(内容分发网络)成为了一种方便快捷的解决方案,而UNPKG就是这种方式中的佼......