前端面试题23-34

23. 说说你对 Promise 的理解

Promise 是 ECMAScript6 引入的一种异步编程解决方案,用于处理异步操作。它表示一个尚未完成但最终会结束的操作,具有三种状态:pending(进行中)、fulfilled(已完成)和 rejected(已拒绝)。Promise 使得异步代码更具可读性和可维护性,避免了传统回调函数嵌套带来的“回调地狱”问题。通过链式调用 then()catch() 方法,可以更加优雅地处理异步操作的结果和错误。

24. Promise 的构造函数

Promise 的构造函数接受一个执行函数(executor),该函数包含两个参数:resolverejectresolve 用于将 Promise 状态从 pending 变为 fulfilled,并传递结果;reject 用于将 Promise 状态从 pending 变为 rejected,并传递错误信息。示例如下:

const promise = new Promise((resolve, reject) => {// 异步操作if (/* 操作成功 */) {resolve(value);} else {reject(error);}
});

25. 谈一谈你了解 ECMAScript6 的新特性?

ECMAScript6(ES6)引入了许多新特性,包括但不限于:

  • 块级作用域声明letconst
  • 箭头函数=>,简化函数定义并自动绑定 this
  • 模板字符串:使用反引号(``)和内嵌表达式 ${}
  • 解构赋值:从数组和对象中提取值并赋给变量
  • class,面向对象编程的新语法
  • 模块importexport,实现模块化
  • 默认参数:为函数参数设置默认值
  • Promise:用于处理异步操作
  • Symbol:一种新的原始数据类型,表示独一无二的值

26. Object.is() 与原来的比较操作符 = 的区别?

Object.is() 用于判断两个值是否严格相等,与 === 类似,但在以下两种情况下有区别:

  • Object.is(NaN, NaN) 返回 true,而 NaN === NaN 返回 false
  • Object.is(+0, -0) 返回 false,而 +0 === -0 返回 true

== 是宽松相等比较,会进行类型转换,而 === 是严格相等比较,不会进行类型转换。

27. 什么是 Babel

Babel 是一个 JavaScript 编译器,用于将现代的 ES6/ES2015+ 代码转换为向后兼容的 ES5 代码,以便在不支持最新标准的环境中运行。Babel 允许开发者使用最新的 JavaScript 特性,而不必担心浏览器兼容性问题。它支持插件和预设,能够扩展和定制编译过程。

28. Symbol 有什么用处

Symbol 是 ES6 引入的一种新的原始数据类型,表示独一无二的值。主要用途包括:

  • 作为对象属性的键,避免属性名冲突
  • 创建不可枚举的属性,隐藏内部实现细节
  • 实现迭代器(iterator)接口

每个 Symbol 都是唯一的,即使使用相同的描述符创建,也不会相等。

29. 模块化

模块化是将代码分割成独立且可重用的模块的编程技术。ES6 提供了原生模块系统,通过 importexport 关键字实现模块的引入和导出。模块化有助于提高代码的可维护性和可读性,支持按需加载,减少命名冲突。

// module.js
export const name = 'Module';
export function greet() {console.log('Hello from module');
}// main.js
import { name, greet } from './module.js';
greet(); // 输出 'Hello from module'

30. 箭头函数的特点

箭头函数是 ES6 引入的简洁函数定义方式,具有以下特点:

  • 使用 => 语法
  • 没有自己的 this,它会捕获上下文的 this
  • 没有 arguments 对象,可以使用 rest 参数 ... 替代
  • 无法通过 new 关键字调用,没有 prototype 属性
const add = (a, b) => a + b;

31. ES5 / ES6 的继承除了写法以外还有什么区别

除了写法上的差异,ES6 继承相较于 ES5 继承具有以下优势:

  • 更加直观和简洁:使用 classextends 关键字,使得继承关系更加清晰
  • super 关键字:调用父类构造函数和方法,简化了继承逻辑
  • 内建的类语法:避免了 ES5 中通过原型链实现继承的复杂性

32. 全局作用域中,用 const 和 let 声明的变量不在 window 上,那到底在哪里?如何去获取?

在全局作用域中,用 constlet 声明的变量不会成为 window 对象的属性。它们处于全局作用域中,但不属于 window 对象,可以直接通过变量名访问。

let a = 10;
const b = 20;
console.log(a); // 输出 10
console.log(b); // 输出 20

33. 介绍下 Set、Map、WeakSet 和 WeakMap 的区别

  • Set:存储唯一值的集合,支持值的快速增删查操作。
  • Map:键值对集合,键可以是任意类型,保持键值对插入顺序。
  • WeakSet:只存储对象的集合,弱引用,不能遍历,没有 clear 方法。
  • WeakMap:键值对集合,键必须是对象,弱引用,不能遍历,没有 clear 方法。
const set = new Set([1, 2, 3]);
const map = new Map([['key1', 'value1'], ['key2', 'value2']]);
const weakSet = new WeakSet();
const weakMap = new WeakMap();

34. Promise.all() 和 Promise.allSettled() 的比较

  • Promise.all():接受一个 Promise 对象的数组,返回一个新的 Promise。当所有 Promise 都 fulfilled 时,返回一个包含所有结果的数组;如果有一个 Promise 被 rejected,则返回第一个被拒绝的理由。
  • Promise.allSettled():接受一个 Promise 对象的数组,返回一个新的 Promise。当所有 Promise 都 settle(完成或拒绝)时,返回一个包含每个 Promise 结果对象的数组,每个结果对象包含 statusvaluereason
Promise.all([promise1, promise2]).then(results => console.log(results)).catch(error => console.error(error));Promise.allSettled([promise1, promise2]).then(results => results.forEach(result => console.log(result)));

通过对 Promise 和 ECMAScript6 的深入理解,可以更好地应对现代 JavaScript 开发中的复杂异步操作和新特性,提升代码质量和开发效率。

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

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

相关文章

代码随想录算法训练营Day22|235.二叉搜索树的最近公共祖先、701.二叉搜索树中的插入操作、450.删除二叉搜索树中的节点

二叉搜索树的最近公共祖先 不考虑二叉搜索树这一条件的话,普通的二叉搜索树搜索最近的公共祖先就是昨日的做法,这种做法也能解决二叉搜索树的最近公共祖先。 class Solution { public:TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, Tr…

贪心算法02(leetcode122/55/4)

参考资料: https://programmercarl.com/0122.%E4%B9%B0%E5%8D%96%E8%82%A1%E7%A5%A8%E7%9A%84%E6%9C%80%E4%BD%B3%E6%97%B6%E6%9C%BAII.html 122. 买卖股票的最佳时机 II 题目描述: 给你一个整数数组 prices ,其中 prices[i] 表示某支股票第…

STM32读写内部FLASH读取芯片id

文章目录 读写内部Flash接线程序编写测试效果补充 读取芯片id代码编写 读写内部Flash 接线 程序编写 首先使用ThisFlash.c来写入flash的基本操作,写入、读取、擦除,然后使用Store.c配合数组来进行主存与flash的交互 ThisFlash.c #include "stm32…

为什么工控现场会用到Profinet转Modbus网关设备

一、背景: 工控现场之所以需要使用Profinet转Modbus网关,是因为工控系统中常常存在不同厂家设备之间通讯协议不一致的问题。而Modbus和Profinet分别代表着两种不同的通信协议,Profinet通常用于较新的设备,而Modbus则是比较老的通…

思科防火墙ASA Version 9.1(1) 怎么配置静态NAT,把内网ip192.168.1.10 端口1000映射到公网端口1000上?

环境: 思科防火墙5520 ASA Version 9.1(1) 问题描述: 思科防火墙ASA Version 9.1(1) 怎么配置静态NAT,把内网ip192.168.1.10 端口1000映射到公网端口1000上? 解决方案: 旧版本8.0 1.做之前要先查一下有没有端口被占用,要和业务确认2.sh Xlate | in 10011 端口 这条…

ch2应用层--计算机网络期末复习

2.1应用层协议原理 网络应用程序位于应用层 开发网络应用程序: 写出能够在不同的端系统上通过网络彼此通信的程序 2.1.1网络应用程序体系结构分类: 客户机/服务器结构 服务器: 总是打开(always-on)具有固定的、众所周知的IP地址 主机群集常被用于创建强大的虚拟服务器 客…

MongoDB CRUD操作:快照查询

MongoDB CRUD操作:快照查询 文章目录 MongoDB CRUD操作:快照查询对比本地和快照的读关注举例从相同的时间点运行查询从过去某个时刻读取数据的一致状态 配置快照保留时间磁盘空间和历史记录 使用快照查询可以读取最近某个时间点的数据,而且从…

基于51单片机的温控风扇的设计–仿真设计

可实现通过DS18B20测量当前环境温度 可实现通过温度自动控制风扇转速 可实现通过按键设置不同风速对应的温度 可实现通过按键切换自动、手动模式 可实现在手动模式下通过按键调整风扇转速 可实现通过LCD1602显示温度、风扇转速挡位、自动/手动模式

【C++】模拟实现string类

🦄个人主页:修修修也 🎏所属专栏:C ⚙️操作环境:Visual Studio 2022 目录 一.了解项目功能 二.逐步实现项目功能模块及其逻辑详解 🎏构建成员变量 🎏实现string类默认成员函数 📌构造函数 📌析构函数…

k8s 全面掌控日志系统

概述 为了提高系统运维和故障排查的效率, 日志系统采用 ELK(Elasticsearch、Logstash、Kibana)技术栈,通过 FileBeats 作为日志收集器,将来自不同节点的日志数据汇总并存储在 Elasticsearch 中,最终通过 K…

创建一个新的Spring Security应用程序,并使用JDBC连接数据库

创建一个新的Spring Security应用程序,并使用JDBC连接数据库 在这个教程中,我们将学习如何创建一个新的Spring Security应用程序,使用JDBC连接数据库以获取用户信息并进行认证。我们还将学习如何配置Spring Security以从数据库中获取用户和权…

Vue3使用Composition API实现响应式

title: Vue3使用Composition API实现响应式 date: 2024/5/29 下午8:10:24 updated: 2024/5/29 下午8:10:24 categories: 前端开发 tags: Vue3CompositionRefsReactiveWatchLifecycleDebugging 1. 介绍 Composition API是Vue.js 3中新增的一组API,用于在组件中组…

SQL 语言:嵌入式 SQL 和动态 SQL

文章目录 基本概述嵌入式 SQL动态 SQL总结 基本概述 嵌入式SQL和动态SQL是两种在应用程序中嵌入和使用SQL语句的方法。它们都允许开发人员在编程语言中编写SQL语句,以便在应用程序中执行数据库操作。然而,这两种方法在实现方式、性能和灵活性方面存在一…

Java数据结构与算法(红黑树)

前言 红黑树是一种自平衡二叉搜索树,确保在插入和删除操作后,树的高度保持平衡,从而保证基本操作(插入、删除、查找)的时间复杂度为O(log n)。 实现原理 红黑树具有以下性质: 每个节点要么是红色&#…

go语言学习之旅之Go结构体

在Go语言中,结构体(struct)是一种用户定义的数据类型,用于组合不同类型的数据项。结构体可以包含其他结构体或基本数据类型的字段。以下是关于Go语言结构体的基本知识: 定义结构体: package mainimport &…

Python 之微信指数小程序数据抓取

Fiddler安装和设置 安装 Fiddler 安装包可以从这里获取,如果失效了可以自己网上找一个安装。 链接:https://pan.baidu.com/s/1N30BoDWm2_dBL8i8GRzK5g?pwd1znv 提取码:1znv 然后就是点击安装就好了,没什么好多说的。 启用…

刷代码随想录有感(83):贪心算法——最大子数组和

题干&#xff1a; 代码&#xff1a; class Solution { public:int maxSubArray(vector<int>& nums) {int res INT_MIN;int count 0;for(int i 0; i < nums.size(); i){count nums[i];if(count > res) res count;if(count < 0)count 0;}return res;} …

【创作活动】探索 GPT-4o:下一代语言模型的技术革命

&#x1f604; 19年之后由于某些原因断更了三年&#xff0c;23年重新扬帆起航&#xff0c;推出更多优质博文&#xff0c;希望大家多多支持&#xff5e; &#x1f337; 古之立大事者&#xff0c;不惟有超世之才&#xff0c;亦必有坚忍不拔之志 &#x1f390; 个人CSND主页——Mi…

HTTP报文

HTTP报文 报文流 HTTP报文是在HTTP引用程序之间发送的数据块&#xff0c;这些数据块以一种文本形式的元信息开头&#xff0c;这些信息描述了报文的内容和含义&#xff0c;后面跟着可选的数据部分&#xff0c;这些报文在客户端&#xff0c;服务器和代理之间流动。 报文流入源…

git更改本地项目关联到新仓库

删除现在远程关联的仓库 git remote rm origin链接新仓库 git remote add origin url(需要关联的新仓库地址)代码提交到远程仓库master分支 git push --set-upstream origin master本地分支更新同步至远程仓库 比如本地有dev分支 git push origin dev:dev