JavaScript 知识点整理

news2025/4/21 20:46:38

1. 什么是AST?它在前端有哪些应用场景?

AST Abstract Syntax Tree抽象语法树,用于表达源码的树形结构

应用:

  • Babel:一个广泛使用的 JS 编译器,将ES6+ 或 JSX 等现代语法转换为兼容性较好的 ES5 代码。
  • Eslint:JS 静态代码分析工具,它基于 AST 来分析代码中潜在问题和违反的代码规范。
  • Terser:JS 压缩工具,使用 AST 进行代码压缩和混淆
  • webpack 和 Rollup:构建工具使用AST 来优化 JS 和其他前端资源的打包过程。

AST 是前端开发中处理代码、优化构建、提高代码质量和实现跨语言支持的核心工具之一。它帮助前端工具深入理解代码结构,从而对代码进行高效的转化、优化和分析。通过AST,前端开发者能够更加轻松地进行代码转换、静态检查、压缩和混淆等操作,从而提高效率和应用性能。

2.中序遍历、前序遍历、后续遍历

在这里插入图片描述

前序遍历:根左右 ABDECFG
中序遍历: 左根右 DBEAFCG
后序遍历:左右根 DEBFGCA

3.什么是 BFF,它又有什么用?

BFF (Backend For Frontend)是一种架构模式,专门为前端应用提供定制化的后端服务。它的核心思想是为不同的前端客户端(如web、移动端、桌面端等)提供专门的后端服务,而不是让所有的客户端共享一个通用后端API

用途:
1)优化前端性能:

  • 减少请求次数:BFF 可以将多个后端API的请求合并为一个,减少前端请求的次数。
  • 减少数据传输量:BFF 可以根据前端的需求,对后端返回的数据进行聚合、过滤或转换、减少不必要的数据传输。
    2)解耦前端和后端
  • 独立开发
  • 灵活适配:BFF可以根据不同的客户端(web、移动端)提供不同的API,而不需要修改后端服务
    3)统一安全控制
    在 BFF 层集中处理身份验证、权限管理、请求限流等安全策略,避免分散到各个微服务。
    4)缓存与容错:缓存高频访问数据(如用户信息),减少后端压力。实现重试、熔断等机制。增强系统容错性

4.同一个url地址,如何实现手机打开是移动端页面,电脑打开是web页面

  1. 流体布局: 100% 、相对单位rem、 flex、grid
  2. 媒介查询(media query):一套代码
    css 判断(@media),js逻辑(matchMedia)
    存在问题: 1.差异化越大,开发维护成本越大;2.打包体积(PC + Mobile)
    结论:适合差异化较小的站点
  3. 服务器判断请求头:user-agent :独立开发、分开开发、独立部署

5.当 QPS 达到峰值是,该如何处理?

  • 缓存:本地缓存、服务器缓存、CDN 预热…
  • 减少请求:合并请求、雪碧图…
  • 延时请求: 懒加载…
  • 扩容
  • 数据库优化:sql优化、索引、读写分离
  • 负载均衡
  • 监控报警

6 如何实现精确的setInterval?

1.根据 performance.now 动态补偿
2.优先使用 requestAnimationFrame 替代定时器,与屏幕刷新率同步(约 16.67ms/帧)【不受失活页面影响,受很多其他因素影响】
3.webworker 【不受失活页面影响,不受渲染帧的影响】

7.页面上有100万个任务需要执行,如何保证页面不卡顿

  1. 任务分批处理: requestAnimationFrame 或者 setTimeout 实现异步调度
  2. requestIdleCallback:在浏览器空闲时执行低优先级任务;
  3. Web Workers:将计算密集型任务移到其他线程:【缺陷:1.无法直接操作 DOM;2.线程间通信(postMessage)有性能开销,需减少数据传递频率】

8.死循环会导致什么后果?无限递归会导致什么后果?

死循环:页面卡顿、无响应
无线递归: 堆栈溢出、程序崩溃

9.后端响应巨量数据,前端如何避免其性能问题?

减少主线程负载,分而治之。优先通过流式传输、分页、Worker多线程减轻数据压力,再结合虚拟化、Canvas等渲染优化提升用户体验。

  1. 网络性能:
    1. 改接口规格
    2. sse( server sent event ) / websocket 实时推送
    3. 流式读取: etch stream
				  const resp = await fetch("XXXX");//等待响应头到达
				  const body = await resp.json();//等待响应体
  1. 渲染性能:
  • 分页(产品参与协调)
  • 分片渲染 (React Fiber)
  • 虚拟滚动
  • canvas

10.vue 项目有哪些常见的优化手段?

  • 图片懒加载、路由懒加载

  • suspence 【用于管理异步操作(如数据加载、代码分割)的组件】

  • v-if 和 v-show

  • 打包手段优化

  • 网络手段优化

    • CDN (公共库)
    • http2
    • 图片格式优化
    • gzip
    • 请求合并
    • GraphQL
  • key

  • computed

  • 保持对象地址的稳定性

  • 延迟装载

  • v-model lazy 延时双向绑定

  • 冻结对象(vue2)

  • 函数式组件(vue2)

11. isNaN 和 Number.NaN 的函数区别?

isNaN 和 Number.isNaN 是 JavaScript 中用于判断 NaN (Not-a-number)的函数。
isNaN 接收参数后,会尝试将这个参数转换为数值,任何不能被转换为数值的值都会返回 true,isNaN(‘true’) === true;
Number.isNaN 会首先判断传入的参数是否是数字,如果是数字再继续判断是否 NaN。

12. Map和object的区别?

MapObject
构造方式new Map()创建通过字面量、new Object()、Object.create()等方式创建
键的类型Map的键可以是任意类型,包括对象、数组、函数等只能是字符串或者Symbol,其他类型的键会被转换为字符串
键的顺序有序无序
键值大小使用 .size 属性来获取其大小。使用 .get() 方法获取值。没有内置的方法来获取其大小(键值对的数量)采用Object.keys(xxx).length获取大小。使用 . 获取值。
原型继承不会从原型链中继承属性会从原型链中继承属性
迭代可以直接迭代获取到键值后才能迭代
性能在频繁添加和删除键值对性能更好在频繁添加和删除键值对未作出优化

13. map和weakMap的区别?

MapweakMap
键的类型可以使用任何类型的值作为键,包括原始类型(如字符串、数字)和对象。只能使用对象作为键
垃圾回收机制键是 强引用。即使键对象已无其他引用,只要 Map 存在,该对象仍不会被垃圾回收,可能导致内存泄漏。键是 弱引用。当键对象无其他引用时,垃圾回收机制会自动回收该键及其关联的值,避免内存泄漏。
迭代和操作支持 遍历操作(如 forEach、for…of),可通过 keys()、values()、entries() 获取迭代器。内置 size 属性,可获取键值对数量。不支持遍历,无 size 属性,也无法直接获取所有键值对。设计初衷是保护键对象的隐私和自动清理,因此不暴露遍历接口。

14. JavaScript 标准内置对象

  1. 基本对象
    构成 JavaScript 的核心基础,用于定义其他对象或行为:
  • Object:所有对象的基类,提供属性操作(如 hasOwnProperty())
  • Function:函数的构造器,每个函数都是其实例
  • Boolean 和 Symbol:分别表示布尔值和唯一符号的包装器
  1. 处理特定类型的数据:
  • String:字符串操作(如 charAt()、replace())
  • Number 和 BigInt:数值类型,后者支持大整数运算
  • Boolean:布尔值的包装类型(注意与基本类型的 true/false 区分)
  1. 集合与数据结构
    存储和管理数据集合:
  • Array:有序元素集合,支持动态操作(如 push()、map())
  • Map 和 Set:键值对集合与唯一值集合
  • WeakMap:弱引用键值对,避免内存泄漏
  1. 错误处理对象
    捕获和管理运行时错误:
  • Error:基础错误类型
  • 子类:TypeError(类型错误)、SyntaxError(语法错误)、ReferenceError(引用错误)等 3 5。
  1. 数学与日期对象
    处理数学运算和日期时间:
  • Math:提供数学函数(如 Math.random())和常量(如 Math.PI)
  • Date:解析和计算日期时间(如 getFullYear())
  1. 其他功能对象
    扩展语言能力的关键对象:
  • JSON:数据序列化与解析(JSON.stringify()、JSON.parse())
  • RegExp:正则表达式,用于字符串模式匹配
  • Promise:管理异步操作
  • Proxy:对象代理,支持元编程(如拦截对象操作)
  1. 全局属性与函数
    全局作用域下的属性和工具函数:
  • 值属性:Infinity(无穷大)、NaN(非数字)、undefined
  • 全局函数:eval()(执行字符串代码)、parseInt()(字符串转整数)、isNaN()(判断非数字)

15.数组有哪些原生方法

  • 数组和字符串的转换方法:toString()、toLocalString()、join() 其中 join() 方法可以指定转换为字符串时的分隔符。
  • 数组尾部操作的方法 pop() 和 push(),push 方法可以传入多个参数。
  • 数组首部操作的方法 shift() 和 unshift() 重排序的方法 reverse() 和 sort(),sort() 方法可以传入一个函数来进行比较,传入前后两个值,如果返回值为正数,则交换两个参数的位置。
  • 数组插入方法 splice(),影响原数组查找特定项的索引的方法,indexOf() 和 lastIndexOf() 迭代方法 every()、some()、filter()、map() 和 forEach() 方法
  • 数组归并方法 reduce() 和 reduceRight() 方法,不影响原数组
  • 数组连接的方法 concat() ,返回的是拼接好的数组,不影响原数组。
  • 数组截取办法 slice(),用于截取数组中的一部分返回,不影响原数组。

16.Unicode、UTF-8、UTF-16、UTF-32的区别?

17.escape、encodeURI、encodeURIComponent的区别

方法编码对象编码范围编码规则兼容性
escape字符串除 ASCII字母、数字、@*/+ 外的字符均编码为 %XX 或 %uXXXX(Unicode编码)直接对字符的Unicode编码加 %u 前缀,仅支持ASCII字符(≤255),已过时且不推荐使用不适用于URL,仅旧环境兼容
encodeURI完整URL保留URL合法字符(如 😕?#[]@ 等),仅编码空格、中文等非法字符为 %XX将非法字符转换为UTF-8字节后编码,保持URL结构完整适用于编码整个URL
encodeURIComponentURL组成部分(如参数)编码范围更广,包括 😕?# 等保留字符,仅保留 !*()’ 和基本ASCII字符对字符进行更严格编码,确保参数值安全传输,常用于拼接查询字符串适用于URL参数或路径片段

18. JavaScript为什么要进行变量提升,它导致了什么问题?

变量提升是JavaScript早期设计中的权衡产物,虽然提升了性能和容错性,但也带来了作用域混乱、变量污染等问题。现代开发中,应优先使用let/const,并通过规范代码结构规避潜在风险

19. ESM 和 CommonJS 有什么区别?

ESMCMJ
标准来源官方标准(新增语法)社区标准(新增API)
导入机制静态声明依赖,模块关系在编译时确定,支持 Tree Shaking 优化动态加载,模块运行时动态生成,灵活性高
加载机制编译时静态分析依赖,支持异步加载运行时同步加载,阻塞后续代码执行
动态加载支持 import 动态导入(返回 Promise)直接使用 require()动态加载
作用域块级作用域,严格模式(this 为 undefined)共享全局作用域,可能污染变量

20.use strict 是什么意思 ? 使用它区别是什么?

是 JavaScript 中用于启用**严格模式(Strict Mode)**的指令,由 ECMAScript 5(ES5)引入。其核心目的是通过更严格的语法和运行时检查,减少代码中的潜在错误,提升安全性及性能。
区别:

  • 构造函数必须使用 new;
  • 变量必须声明
  • 禁止使用eval、 with 语句;
  • 禁止 this 关键字指向全局对象;
  • 对象不能有重名的属性;
    优势:
  • 消除静默错误:将隐式错误转为显式报错,提升代码健壮性
  • 提高安全性:限制危险操作(如 eval、with),减少漏洞风险
  • 优化性能:静态分析支持编译器优化(如 Tree Shaking)

21.for…in和for…of的区别

for…infor…of
迭代对象遍历对象的可枚举属性(包括继承的属性),适用于普通对象、数组(但不推荐)遍历可迭代对象(如数组、字符串、Map、Set等),要求对象实现 Symbol.interator接口
迭代内容返回键名返回值
遍历顺序不确定(对象属性无固定顺序)确定(按可迭代对象的顺序,如数组索引顺序)
兼容性ES6+
性能会检查原型链,性能较低对数组的遍历效率接近 传统 for 循环

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

鸿蒙与DeepSeek深度整合:构建下一代智能操作系统生态

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。 https://www.captainbed.cn/north 目录 技术融合背景与价值鸿蒙分布式架构解析DeepSeek技术体系剖析核心整合架构设计智能调度系统实现…

利用行波展开法测量横观各向同性生物组织的生物力学特性|文献速递-医学影像人工智能进展

Title 题目 Measurement of biomechanical properties of transversely isotropic biological tissue using traveling wave expansion 利用行波展开法测量横观各向同性生物组织的生物力学特性 01 文献速递介绍 纤维嵌入结构在自然界中普遍存在。从脑白质(罗曼…

AR配置静态IP双链路负载分担示例

AR配置静态IP双链路负载分担示例 适用于大部分企业网络出口 业务需求: 运营商1分配的接口IP为100.100.1.2,子网掩码为255.255.255.252,网关IP为100.100.1.1。 运营商2分配的接口IP为200.200.1.2,子网掩码为255.255.255.248&am…

文件操作(详细讲解)(1/2)

你好这里是我说风俗,希望各位客官点点赞,收收藏,关关注,各位对我的支持是我持续更新的动力!!!!第二期会马上更的关注我获得最新消息哦!!!&#xf…

[AI]从零开始的so-vits-svc歌声推理及混音教程

一、前言 在之前的教程中已经为大家讲解了如何安装so-vits-svc以及使用现有的模型进行文本转语音。可能有的小伙伴就要问了,那么我们应该怎么使用so-vits-svc来进行角色歌曲的创作呢?其实歌曲的创作会相对麻烦一些,会使用到好几个软件&#x…

SpringMVC控制器定义:@Controller注解详解

文章目录 引言一、Controller注解基础二、RequestMapping与请求映射三、参数绑定与数据校验四、RestController与RESTful API五、控制器建议与全局处理六、控制器测试策略总结 引言 在SpringMVC框架中,控制器(Controller)是整个Web应用的核心组件,负责处…

免费分享一个软件SKUA-GOCAD-2022版本

若有需要,可以下载。 下载地址 通过网盘分享的文件:Paradigm SKUA-GOCAD 22 build 2022.06.20 (x64).rar 链接: https://pan.baidu.com/s/10plenNcMDftzq3V-ClWpBg 提取码: tm3b 安装教程 Paradigm SKUA-GOCAD 2022版本v2022.06.20安装和破解教程-CS…

学习threejs,使用LineBasicMaterial基础线材质

👨‍⚕️ 主页: gis分享者 👨‍⚕️ 感谢各位大佬 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍⚕️ 收录于专栏:threejs gis工程师 文章目录 一、🍀前言1.1 ☘️THREE.LineBasicMaterial1.…

java面试题(一)基础部分

1.【String】StringBuffer和StringBuilder区别? String对象是final修饰的不可变的。对String对象的任何操作只会生成新对象,不会对原有对象进行操作。 StringBuilder和StringBuffer是可变的。 其中StringBuilder线程不安全,但开销小。 St…

Mac mini M4安装nvm 和node

先要安装Homebrew(如果尚未安装)。在终端中输入以下命令: /bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)" 根据提示操作完成Homebrew的安装。 安装nvm。在终端中输入以下命令&#xf…

Ubuntu20.04双系统安装及软件安装(四):国内版火狐浏览器

Ubuntu20.04双系统安装及软件安装(四):国内版火狐浏览器 Ubuntu系统会自带火狐浏览器,但该浏览器不是国内版的,如果平常有记录书签、浏览记录、并且经常使用浏览器插件的习惯,建议重装火狐浏览器为国内版的…

react中如何使用使用react-redux进行数据管理

以上就是react-redux的使用过程,下面我们开始优化部分:当一个组件只有一个render生命周期,那么我们可以改写成一个无状态组件(UI组件到无状态组件,性能提升更好)

DeepSeek使用手册分享-附PDF下载连接

本次主要分享DeepSeek从技术原理到使用技巧内容,这里展示一些基本内容,后面附上详细PDF下载链接。 DeepSeek基本介绍 DeepSeek公司和模型的基本简介,以及DeepSeek高性能低成本获得业界的高度认可的原因。 DeepSeek技术路线解析 DeepSeek V3…

新品速递 | 多通道可编程衰减器+矩阵系统,如何破解复杂通信测试难题?

在无线通信技术快速迭代的今天,多通道可编程数字射频衰减器和衰减矩阵已成为测试领域不可或缺的核心工具。它们凭借高精度、灵活配置和强大的多通道协同能力,为5G、物联网、卫星通信等前沿技术的研发与验证提供了关键支持。从基站性能测试到终端设备校准…

Data truncation: Out of range value for column ‘allow_invite‘ at row 1

由于前端传递的数值超过了mysql数据库中tinyint类型的取值范围,所以就会报错。 Caused by: com.mysql.cj.jdbc.exceptions.MysqlDataTruncation: Data truncation: Out of range value for column allow_invite at row 1at com.mysql.cj.jdbc.exceptions.SQLExcept…

HCIA—IP路由静态

一、概念及作用 1、概念:IP路由是指在IP网络中,数据从源节点到目的节点所经过的路径选择和数据转发的过程。 2、作用 ①实现网络互联:使不同网段的设备能够相互通信,构建大规模的互联网络 ②优化网络拓扑:根据网络…

Hz的DP总结

前言: 鉴于本人是一个DP低手,以后每写一道DP都会在本篇博客下进行更新,包括解题思路,方法,尽量做到分类明确,其中的题目来自包括但并不限于牛客,洛谷,CodeForces,AtCode…

【三极管8050和8550贴片封装区分脚位】

这里写自定义目录标题 三极管8050和8550贴片封装区分脚位三极管8050三极管8550 三极管8050和8550贴片封装区分脚位 三极管8050 增加了 检查列表 功能。 [ NPN型三极管(SS8050) ]: SS8050的使用及引脚判断方法 三极管8550

C# Unity 唐老狮 No.6 模拟面试题

本文章不作任何商业用途 仅作学习与交流 安利唐老狮与其他老师合作的网站,内有大量免费资源和优质付费资源,我入门就是看唐老师的课程 打好坚实的基础非常非常重要: 全部 - 游习堂 - 唐老狮创立的游戏开发在线学习平台 - Powered By EduSoho 如果你发现了文章内特殊的字体格式,…

二、Visual Studio2022配置OpenGL环境

文章目录 一、OpenGL库的下载二、OpenGL环境配置三、测试代码演示 一、OpenGL库的下载 OpenGL配置的库是GLFWGLAD ,GLFW 主要用于创建 OpenGL 窗口和管理输入;GLAD 主要用于加载 OpenGL 函数 GLFW下载地址 下载Windows的32bit版本即可。 下载完成解压如…