跟着B站前端面试总结回顾前端基础知识(一)

组件划分标准 

组件划分_哔哩哔哩_bilibili

 

在前端Vue开发中,组件的划分是构建高效、可维护应用的关键步骤。Vue组件的划分标准通常基于多个方面的考虑,包括但不限于功能独立性、复用性、可维护性和可扩展性。以下是一些Vue组件划分的标准:

1. 单一职责原则

  • 功能独立性:每个组件应该只负责一个单一的功能或一组紧密相关的功能。这有助于保持组件的简洁和易于理解。
  • 高内聚低耦合:组件内部应该紧密相关,而与外部其他组件的依赖关系应尽可能减少。这有助于提高组件的复用性和可维护性。

2. 复用性

  • 可重用组件:将那些在不同页面或功能中可能重复使用的UI元素或功能封装成组件。例如,按钮、输入框、弹窗等都可以封装成可复用的组件。
  • 参数化:为了提高组件的复用性,可以通过props接收外部传入的参数来动态改变组件的行为或展示内容。

3. 可维护性

  • 清晰的结构:组件的结构应该清晰明了,易于理解和维护。可以通过合理的目录结构和命名规范来实现。
  • 易于测试:组件应该设计成易于测试的形式,包括单元测试和集成测试。这有助于在开发过程中快速发现并修复问题。

4. 可扩展性

  • 插槽(Slots):利用Vue的插槽机制,可以让组件更加灵活和可扩展。通过定义插槽,可以让组件的使用者自定义部分内容,而不必修改组件的源代码。
  • 事件与回调:通过自定义事件和回调函数,组件之间可以进行有效的通信和交互,从而支持更复杂的功能和场景。

5. 命名规范

  • 遵循命名规范:为组件制定一套清晰的命名规范,有助于团队成员之间的协作和项目的维护。一般来说,组件名应该使用小写字母,多个单词之间可以使用连字符(-)或中划线(_)连接。

6. 性能考虑

  • 避免过度嵌套:过多的嵌套会增加组件的复杂度,并可能影响性能。因此,在划分组件时应该尽量避免不必要的嵌套。
  • 按需加载:对于大型应用来说,可以通过Vue的异步组件和Webpack的代码分割功能来实现组件的按需加载,从而优化应用的加载速度和性能。

综上所述,Vue组件的划分标准是一个综合性的考虑过程,需要根据项目的实际需求、团队的开发习惯以及Vue框架的特性来制定合理的划分方案。通过合理的组件划分,可以构建出高效、可维护、可扩展的前端应用。

Javascript传值与传地址 

在JavaScript中,变量的传递方式本质上只有一种:按值传递(Pass by Value),但这可能会引起一些关于“传值”与“传地址”的混淆,尤其是在处理对象(Objects)和数组(Arrays)时。下面详细解释这一点:

基本数据类型的传值

对于基本数据类型(如:Number, String, Boolean, Undefined, Null, Symbol, BigInt),JavaScript是严格按值传递的。这意味着当你将一个基本数据类型的变量赋值给另一个变量,或者作为参数传递给函数时,实际上传递的是该变量的一个值拷贝。因此,对接收到的值的修改不会影响到原始数据。

// 但是,如果尝试改变obj2本身引用的地址,则不会影响obj  
obj2 = {value: 20}; // obj2现在引用一个新的对象  
console.log(obj.value); // 输出: 10,因为obj的引用没有改变

对象和数组的“传地址”表现

对于对象和数组,虽然它们也是按值传递,但这个“值”是引用地址(或者说是内存地址的引用)。当你将一个对象或数组变量赋值给另一个变量,或者作为参数传递给函数时,实际上传递的是这个对象或数组在内存中的地址(或者说是引用)。因此,你通过这个新变量(或函数参数)对对象或数组进行修改时,实际上是修改了同一块内存中的数据,这就会影响到原始的对象或数组。

let obj = {value: 5};  
let obj2 = obj; // obj2获得obj的引用地址  
obj2.value = 10; // 修改obj2引用的对象,会影响obj  
console.log(obj.value); // 输出: 10  // 但是,如果尝试改变obj2本身引用的地址,则不会影响obj  
obj2 = {value: 20}; // obj2现在引用一个新的对象  
console.log(obj.value); // 输出: 10,因为obj的引用没有改变

// 但是,如果尝试改变obj2本身引用的地址,则不会影响obj  
obj2 = {value: 20}; // obj2现在引用一个新的对象  
console.log(obj.value); // 输出: 10,因为obj的引用没有改变 

总结

  • 基本数据类型:严格按值传递,传递的是变量的一个值拷贝。
  • 对象和数组:虽然也是按值传递,但这个“值”是引用地址。通过这个地址可以访问和修改原始对象或数组,但重新赋值(即改变引用地址)则不会影响到原始数据。

 

 Array

在JavaScript中,Array 类型提供了许多内置的方法来操作数组,包括添加、删除、遍历、搜索、排序等。以下是一些常见的 Array 方法:

  1. push()
    • 向数组的末尾添加一个或多个元素,并返回新的数组长度。
  2. pop()
    • 删除并返回数组的最后一个元素。
  3. shift()
    • 删除并返回数组的第一个元素。
  4. unshift()
    • 在数组的开头添加一个或多个元素,并返回新的数组长度。
  5. concat()
    • 用于合并两个或多个数组。此方法不会改变现有的数组,而是返回一个新数组
  6. slice()
    • 返回一个浅拷贝的新数组对象,这个对象是一个由 begin 到 end(不包括 end)选择的数组的一部分浅拷贝。原始数组不会被修改。
  7. splice()

    • 通过删除现有元素和/或添加新元素来更改一个数组的内容。这个方法会改变原数组
  8. join()
    • 把数组的所有元素放入一个字符串。元素通过指定的分隔符进行分隔。
  9. sort()
    • 对数组的元素进行排序,并返回数组。排序不一定是稳定的。默认排序顺序是在将元素转换为字符串,然后比较它们的UTF-16代码单元值序列时构建的。
  10. reverse()
    • 颠倒数组中元素的顺序。
  11. indexOf()
    • 返回在数组中可以找到一个给定元素的第一个索引,如果不存在,则返回-1
  12. lastIndexOf()
    • 返回指定值在数组中的最后一个索引,如果不存在则返回-1。从数组的后面向前查找。
  13. forEach()

    • 对数组的每个元素执行一次提供的函数。
  14. map()

    • 创建一个新数组,其结果是该数组中的每个元素是调用一次提供的函数后的返回值。
  15. filter()

    • 创建一个新数组, 其包含通过所提供函数实现的测试的所有元素。
  16. reduce()
    • 对数组中的每个元素执行一个由您提供的reducer函数(升序执行),将其结果汇总为单个返回值。
  17. reduceRight()
    • 它的工作原理类似于 reduce(),不同的是它是从数组的末尾开始向前遍历。
  18. find()
    • 返回数组中满足提供的测试函数的第一个元素的值。否则返回 undefined
  19. findIndex()
    • 返回数组中满足提供的测试函数的第一个元素的索引。否则返回-1。
  20. flat()
    • 按照一个可指定的深度递归遍历数组,并将所有元素与遍历到的子数组中的元素合并为一个新数组返回
  21. flatMap()
    • 首先使用映射函数映射每个元素,然后将结果压缩成一个新数组。它与 map 和 flat 方法的结合非常相似,但 flatMap 通常在性能上更优。

 

 

 Javascript常见遍历数组的方法

JavaScript 中遍历数组常见的方法有:

for 循环:

使用 for 循环可以遍历数组中的每个元素,并对其进行操作。

const array = [1, 2, 3, 4, 5];

for (let i = 0; i < array.length; i++) { console.log(array[i]); }

forEach 方法:

使用 forEach 方法可以遍历数组中的每个元素,并对其执行指定的函数操作。

const array = [1, 2, 3, 4, 5];

array.forEach(item => { console.log(item); });

map 方法:

使用 map 方法可以遍历数组中的每个元素,并返回一个新数组,新数组的元素是对原数组中每个元素执行函数后的结果。

const array = [1, 2, 3, 4, 5];

const newArray = array.map(item => { return item * 2; }); console.log(newArray);

filter 方法:

使用 filter 方法可以遍历数组中的每个元素,并返回一个新数组,新数组中的元素是满足指定条件的原数组元素。

const array = [1, 2, 3, 4, 5];

const newArray = array.filter(item => { return item > 3; }); console.log(newArray);

reduce 方法:

使用 reduce 方法可以将数组中的元素归约为一个值,通过指定的函数操作。

const array = [1, 2, 3, 4, 5];

const sum = array.reduce((accumulator, currentValue) =>

{ return accumulator + currentValue; }, 0);

console.log(sum);

以上是 JavaScript 中常见的几种遍历数组的方法,根据需求和使用场景选择合适的方法来处理数组数据。

判断数组数据类型的方式

在JavaScript中,typeofinstanceof是两种常用的判断变量类型的方法,它们各有特点和适用场景。以下是将这两种方法与其他常见判断类型方法(如Object.prototype.toString.call()Array.isArray())进行对比的表格:

方法描述优点缺点
typeof返回一个表示操作数类型的字符串1. 快速简单,适用于基本数据类型<br>2. 语法简洁1. 无法准确判断null(返回object)<br>2. 无法准确区分引用数据类型(除function外,其他都返回object
instanceof判断一个对象是否是其原型链上构造函数的实例1. 可以准确判断复杂引用数据类型<br>2. 适用于自定义类型的判断1. 无法判断基本数据类型<br>2. 假定只有一个全局执行环境,不适用于跨iframe判断<br>3. 所有对象类型instanceof Object都是true
Object.prototype.toString.call()调用ObjecttoString方法,并传入变量,通过返回值判断类型1. 可以准确判断所有基本数据类型和对象类型<br>2. 适用于nullundefined的判断<br>3. 不会受对象自定义toString方法的影响1. 对于自定义对象类型,只能返回[object Object],无法精确区分
Array.isArray()ES5中新增的方法,专门用于判断变量是否为数组1. 准确可靠<br>2. 可以检测iframe中的数组<br>3. 不会被覆盖或修改1. 需要在ES5及更高版本的JavaScript环境中使用(IE8及以下不支持)<br>2. 只能判断数组类型,无法判断其他数据类型

详细对比说明:

  • typeof
    • 优点:操作简单,可以快速区分基本数据类型(如numberstringbooleanundefinedfunction等)。
    • 缺点:对于null类型会返回object,容易引起混淆;对于引用数据类型(如对象、数组等),除function外,都返回object,无法准确区分。
  • instanceof
    • 优点:能够准确判断复杂引用数据类型,包括自定义类型。
    • 缺点:无法判断基本数据类型;在存在多个全局执行环境(如iframe)的情况下,可能无法正确判断;所有对象类型instanceof Object的结果都是true,这在某些情况下可能不是所期望的。
  • Object.prototype.toString.call()
    • 优点:能够准确判断所有基本数据类型和对象类型,包括nullundefined
    • 缺点:对于自定义对象类型,只能返回[object Object],无法精确区分具体类型。
  • Array.isArray()
    • 优点:专门用于判断数组类型,准确可靠,且不受对象自定义方法的影响。
    • 缺点:只能在ES5及更高版本的JavaScript环境中使用,且只能判断数组类型,无法判断其他数据类型。

综上所述,在选择判断类型的方法时,应根据具体需求和场景来决定使用哪种方法。对于基本数据类型的判断,typeof是一个快速简单的选择;对于复杂引用数据类型的判断,特别是需要区分具体类型时,Object.prototype.toString.call()可能是一个更好的选择;而instanceof则适用于需要判断对象是否属于某个特定类(包括自定义类)的实例的场景;Array.isArray()则是专门用于判断数组类型的最佳选择。

 

 

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

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

相关文章

使用CORS解决跨域问题

CORS&#xff08;Cross-Origin Resource Sharing&#xff09;跨域资源共享 因为浏览器的同源策略才出现了跨域问题。 CORS是一套机制&#xff0c;用于浏览器校验跨域请求。 它的基本理念是&#xff1a; 只要服务器明确表示允许&#xff0c;则校验通过服务器明确拒绝或没有表…

二分查找【算法 09】

二分查找算法详解 二分查找&#xff08;Binary Search&#xff09;是一种高效的查找算法&#xff0c;前提是数据必须是有序的。相比于线性查找&#xff0c;二分查找的时间复杂度从 O(n) 降低到了 O(log n)&#xff0c;适合处理大规模的数据查找问题。本文将详细介绍二分查找的原…

浅谈二分算法

浅谈二分算法 二分 首先知道一下二分是什么。 二分&#xff0c;是一种快速处理大型数据的方法。基本逻辑是折半查找。 设有一个共有 n n n 个数字的数组&#xff0c;要从中查询某个元素&#xff0c;就可以用二分查找。 注&#xff1a;这里的数组默认其成员数值具有单调性…

【STM32】串口(异步通信部分)

经典的串口接口硬件说实话在现在的电脑上已经很难见到了&#xff0c;而是被USB这种通用的串行接口替代了&#xff0c;哪怕外部设备要以串口连接到电脑&#xff0c;都需要进行各种硬件转换。但不得不说&#xff0c;在工业领域&#xff0c;串口还是一个非常常用的数据传输方式。 …

vue3 语法糖<script setup>

在 Vue 3 中&#xff0c;<script setup>是一种新的语法糖&#xff0c;它极大地简化了组件的编写方式。 <script setup> 是在单文件组件 (SFC) 中使用组合式 API 的编译时语法糖。当同时使用 SFC 与组合式 API 时该语法是默认推荐。 基本概念 简洁的语法&#xf…

国产GD32单片机开发入门(二)GD32单片机详解

文章目录 一.概要二.单片机型号命名规则三.GD32F103系统架构四.GD32F103C8T6单片机启动流程五.GD32F103C8T6单片机主要外设资源六.单片机开发过程中查看芯片数据手册的必要性1.单片机外设资源情况2.GD32单片机内部框图3.GD32单片机管脚图4.GD32单片机每个管脚功能5.单片机功耗数…

解决前端访问IIS服务器发生跨域请求报错的方法

现在WEB开发都是前后端分离的模式了&#xff0c;当前端代码访问后端WEB服务器时&#xff0c;经常会发生跨域请求报错的问题。   如果是IIS服务器&#xff0c;可以通过下面的方式轻松解决。   由于出现跨域问题是因为服务器返回的页面在返回头中没有设置“Access-Control-Al…

SQL Server数据库 创建表,和表的增删改查

打开SQL Server工具,连接服务器 右击数据库&#xff0c;创建新的数据库 新建表 填写列&#xff0c;我添加了Id,Name,Sex,Age,和class列 右键表刷新一下就有了 我又同时创建了一个Class表 点击新建查询&#xff0c;现在写代码添加数据&#xff0c;也可以操作表来对数据进行添加 …

[CLIP-VIT-L + Qwen] 多模态大模型源码阅读 - DataSet篇

[CLIP-VIT-L Qwen] 多模态大模型源码阅读 - DataSet篇 前情提要源码解读完整代码逐行解读导包readjson函数data_collate函数ImageCaptionDataset类&#xff08;init函数&#xff09;ImageCaptionDataset类&#xff08;readImage函数&#xff09; 参考repo:WatchTower-Liu/VLM-…

趋动科技 OrionX on VMware 打造 AI 就绪平台

着科技进步和产业变革的加速演进&#xff0c;人工智能&#xff08;AI&#xff09;已经成为兵家必争之地。今年以来伴随着ChatGPT带来的鲶鱼效应&#xff0c;人工智能成为科技产业创新的焦点&#xff0c;其应用范围越来越广泛&#xff0c;并将持续发展。科技产业龙头正加大在人工…

Redis入门指南

Redis&#xff08;Remote Dictionary Server&#xff09;是一个开源的高性能键值对存储系统&#xff0c;它支持多种数据结构&#xff0c;如字符串、哈希、列表、集合、有序集合等。Redis因其快速的读写能力、丰富的数据类型和灵活的操作而广泛应用于缓存、消息队列、实时分析等…

链接 -- 动静态链接 --特点、区别、静态库安装下载

1.链接是什么&#xff1f; 我们的程序&#xff0c;和 库&#xff08;语言一定会有自己的标准库&#xff09; 结合的过程就叫做链接。 2.为什么有链接&#xff1f; 让开发站在巨人的肩膀&#xff0c;提高开发效率。 c语言库&#xff1a; ls /user/include/ 动静态库的特点与区别…

力扣面试经典算法150题:O(1) 时间插入、删除和获取随机元素

O(1) 时间插入、删除和获取随机元素 今天的题目是力扣面试经典150题中的数组的中等难度题&#xff1a; O(1) 时间插入、删除和获取随机元素。 题目链接&#xff1a;https://leetcode.cn/problems/insert-delete-getrandom-o1/description/?envTypestudy-plan-v2&envIdtop…

Oracle问题笔记

ORA-28040 没有匹配的验证协议 问题出现场景oracle数据库为12c,应用使用的jdbc或客户端工具是11g版本一下&#xff0c;连接12c数据库时会报ora-28040错误。解决办法在Oracle服务端的$ORACLE_HOME/network/admin/sqlnet.ora文件中添加&#xff1a; SQLNET.ALLOWED_LOGON_VERSI…

第4章 汇编语言和汇编软件

第4章 汇编语言和汇编软件 该章主要介绍了汇编语言和汇编语言编译器的安装和使用。 汇编语言程序 该小节主要介绍了为什么要有汇编语言和汇编语言程序的一些基础写法。 书中有提到CPU有不同的架构&#xff0c;汇编语言有不同的风格&#xff0c;那么不同的CPU架构和不同的汇…

日常维护交换机,看看这些老网工怎么说

号主&#xff1a;老杨丨11年资深网络工程师&#xff0c;更多网工提升干货&#xff0c;请关注公众号&#xff1a;网络工程师俱乐部 晚上好&#xff0c;我的网工朋友。 交换机作为连接各个节点的核心设备&#xff0c;其稳定性和可靠性直接关系到整个网络系统的健康运行。 路由器…

vue开发区分开发环境和生产环境,以及预发布环境

vue开发区分开发环境和生产环境&#xff0c;以及预发布环境 在根目录创建 .env[mode] 文件&#xff0c;在项目执行 npm run dev 的时候vite会自动去读取.env.development文件里面的配置&#xff0c;执行npm runbuild进行打包之后也会自动将.env.production的内容打包进去&…

Kafka日志及常见问题

目录 1.Topic下的消息是如何存储的 1.1log文件追加记录所有消息 1.2index和timeindex加速读取日志信息 2.文件清理机制 2.1如何判断哪些日志文件过期了 2.2日志清理策略 3.Kafka的文件高效读写机制 3.1Kafka的文件结构 3.2顺序写磁盘 3.3零拷贝 3.3.1传统IO 3.3.2m…

【硬件操作入门】2--GPIO与门电路、二极管三极管、LED电路与操作

【硬件操作入门】2–GPIO与门电路&#xff08;二极管&三极管&#xff09;、LED电路与操作 文章目录 【硬件操作入门】2--GPIO与门电路&#xff08;二极管&三极管&#xff09;、LED电路与操作一、GPIO与门电路1.1、GPIO的应用1.2、GPIO引脚操作1.2.1 设置引脚为GPIO功能…

加速网络体验,Squid缓存代理:让浏览如飞,畅享无限网络速度!

作者简介&#xff1a;我是团团儿&#xff0c;是一名专注于云计算领域的专业创作者&#xff0c;感谢大家的关注 座右铭&#xff1a; 云端筑梦&#xff0c;数据为翼&#xff0c;探索无限可能&#xff0c;引领云计算新纪元 个人主页&#xff1a;团儿.-CSDN博客 目录 前言: squ…