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

前端面试题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 开发中的复杂异步操作和新特性,提升代码质量和开发效率。

相关文章:

前端面试题23-34

23. 说说你对 Promise 的理解 Promise 是 ECMAScript6 引入的一种异步编程解决方案,用于处理异步操作。它表示一个尚未完成但最终会结束的操作,具有三种状态:pending(进行中)、fulfilled(已完成&#xff0…...

Hadoop3:HDFS中DataNode与NameNode的工作流程

一、DataNode中的数据情况 数据位置 /opt/module/hadoop-3.1.3/data/dfs/data/current/BP-823420375-192.168.31.102-1714395693863/current/finalized/subdir0/subdir0块信息 每个块信息,由两个文件保存,xxx.meta保存的是数据长度、校验和、时间戳&am…...

MySQL(一) 库和表的基础操作

1. 数据库基础 1.1 什么是数据库 存储数据用文件就可以了,为什么还要弄个数据库? 文件保存数据有以下几个缺点: 文件的安全性问题文件不利于数据查询和管理文件不利于存储海量数据文件在程序中控制不方便 数据库存储介质:磁盘内存 为了解…...

python -【二】判断语句

判断语句 一、 布尔类型 True&#xff1a;真(1)False&#xff1a;假(0) 比较运算符 运算符实例1 1 True!1 ! 1 Flase<1 < 1 Flse>1 > 1 Flse<1 < 1 True>1 > 1 True b1 True b2 False print(f"b1值是{b1},类型是{type(b1)}") print(…...

高通Android 12/13 设置和获取ADB状态

/*** 设置ADB状态** param isEnable*/public void setADB(boolean isEnable) {Settings.Global.putInt(mContext.getContentResolver(), Settings.Global.ADB_ENABLED, isEnable ? 1 : 0);}/*** 获取ADB状态** return*/public boolean getADB() {return Settings.Global.getIn…...

存储器和CPU的连接与TCP的流量控制

存储器与CPU的连接 存储容量的拓展 &#xff08;1)位拓展&#xff1a;增加存储字长 &#xff08;2&#xff09;字拓展 增加存储器字的数量 例题&#xff1a;设CPU有16根地址线&#xff0c;8根数据线&#xff0c;并用MREQ作为访问存储控制信号(低电平有效)&#xff0c;WR作为…...

红蓝对抗提权篇之一文看懂提权

一、计算机中的权限 1.1 不同的权限系统 权限在不同的应用中有着不同的分类&#xff0c;与安全相关的大致上我们分为&#xff1a; 匿名访问权限 来宾权限 用户权限 管理员权限 系统权限 不同的权限对应的权力各不相同&#xff0c;我们对自己电脑一般是用户权限和管理员权限。…...

【Tlias智能学习辅助系统】01 准备工作

Tlias智能学习辅助系统 01 创建员工、部门表创建springboot工程&#xff0c;引入对应的起步依赖(web、mybatis、mysql驱动、lombok)准备 Mapper、Service、Controller 等基础结构MapperServiceControllerpojo封装类application.properties 接口开发规范 创建员工、部门表 -- 创…...

yq—2024/5/29—零钱兑换

代码实现&#xff1a; #define min(a, b) ((a) > (b) ? (b) : (a))int coinChange(int *coins, int coinsSize, int amount) {int dp[amount 1];// 初始化for (int i 0; i < amount 1; i) {dp[i] INT32_MAX;}dp[0] 0;// 01背包 -----先遍历物品&#xff0c;再遍历背…...

【 Quartz框架中各个表及其字段含义】

Quartz框架中各个表及其字段含义 Quartz是一个强大的任务调度框架,它通过在数据库中维护多张表来存储和管理任务信息。了解这些表的结构和字段含义,有助于我们更好地理解Quartz的工作原理,并在实际应用中进行有针对性的优化和管理。 想了解Quartz框架其他信息可以参考下面的博…...

SAP_SD模块 物料科目分配/成本简介

SAP系统各模块与财务都有个方面的集成。文本主要说明销售模块中的科目分配和成本的一个对应关系。 1、首先是在物料主数据上销售视图中的物料科目分配组&#xff0c;S1主营、S2材料等字段&#xff0c;物料销售的时候会将这个物料产生的记录到对应的科目中。 首先是物料主数据中…...

el-select 组件获取整个对象

法一&#xff1a;要获取整个对象的话&#xff0c;如果有列表就可以遍历列表&#xff0c;找到指定对象 let obj this.chainTaskList.find((item) > item.chainTaskNo e); if (obj) {this.form.storeNo obj.storeNo;this.form.storeName obj.couponVO.storeName; }或 fo…...

基础—SQL—DQL(数据查询语言)基础查询

一、引言 1、介绍&#xff1a; 分类全称描述DQL英文全称&#xff1a;Data Query Language(数据查询语言)主要是学习对数据库表中的记录进行查询的语句 2、讲解 日常的开发中或者对于一个正常的业务系统中&#xff0c;对于查询的操作次数是远远多于数据的增删改的频次。例如…...

【QT八股文】系列之篇章2 | QT的信号与槽机制及通讯流程

【QT八股文】系列之篇章2 | QT的信号与槽机制及通讯流程 前言2. 信号与槽信号与槽机制介绍/本质/原理&#xff0c;什么是Qt信号与槽机制&#xff1f;如何在Qt中使用&#xff1f;信号与槽机制原理&#xff0c;解析流程Qt信号槽的调用流程信号与槽机制的优缺点信号与槽机制需要注…...

excel表格里怎样不删除0,又不显示0呢?

在单元格里不显示0&#xff0c;大体上有这么几种方法&#xff1a; 1.设置单元格自定义格式 选中数据区域&#xff0c;鼠标右键&#xff0c;点一下设置单元格格式&#xff0c;选中数字&#xff0c;自定义&#xff0c;在右侧的类型栏&#xff0c;设置格式&#xff1a; [0]&quo…...

精准操控时间的艺术:JavaScript节流函数的深度探索与实践【含代码示例】

精准操控时间的艺术&#xff1a;JavaScript节流函数的深度探索与实践【含代码示例】 节流基础&#xff1a;概念与作用实现策略&#xff1a;案例展示案例一&#xff1a;基础定时器实现案例二&#xff1a;立即执行版本案例三&#xff1a;使用requestAnimationFrame实现动画节流 功…...

自学SPSS,有哪些教学视频或书籍推荐?

书籍推荐 经过长达八年的不断迭代与优化&#xff0c;SPSSAU的用户群体已经远超简单的数据分析层面&#xff0c;而是逐步深入到了学术研究的精髓之中。如今&#xff0c;无论是在SCI、EI等国际权威学术期刊&#xff0c;还是北大核心期刊、CSSCI等国内顶尖学术期刊上&#xff0c;…...

开源数据库同步工具DBSyncer

前言&#xff1a; 这么实用的工具&#xff0c;竟然今天才发现&#xff0c;相见恨晚呀&#xff01;&#xff01;&#xff01;&#xff01; DBSyncer&#xff08;英[dbsɪŋkɜː]&#xff0c;美[dbsɪŋkɜː 简称dbs&#xff09;是一款开源的数据同步中间件&#xff0c;提供M…...

【SpringMVC】_SpringMVC项目返回HTML与JSON

目录 1. SpringMVC项目返回HTML页面 2. SpringMVC项目返回JSON 2.1 程序演示 2.2 关于响应的Content-Type 2.2.1 接口为对象 2.2.2 接口为String 2.2.3 接口为Map 本专栏已介绍&#xff1a; 返回静态页面&#xff1a; 【Spring MVC】_SpringMVC项目返回静态页面_mvc 返…...

STL库--stack

目录 stack的定义 stack容器内元素的访问 stack常用函数实例解析 stack的常见用途 stack的定义 其定义的写法和其他STL容器相同&#xff0c;typename可以任意基本类型或容器&#xff1a; stack<typename> name; stack容器内元素的访问 由于栈本身就是一种后进先出…...

云原生核心技术 (7/12): K8s 核心概念白话解读(上):Pod 和 Deployment 究竟是什么?

大家好&#xff0c;欢迎来到《云原生核心技术》系列的第七篇&#xff01; 在上一篇&#xff0c;我们成功地使用 Minikube 或 kind 在自己的电脑上搭建起了一个迷你但功能完备的 Kubernetes 集群。现在&#xff0c;我们就像一个拥有了一块崭新数字土地的农场主&#xff0c;是时…...

ES6从入门到精通:前言

ES6简介 ES6&#xff08;ECMAScript 2015&#xff09;是JavaScript语言的重大更新&#xff0c;引入了许多新特性&#xff0c;包括语法糖、新数据类型、模块化支持等&#xff0c;显著提升了开发效率和代码可维护性。 核心知识点概览 变量声明 let 和 const 取代 var&#xf…...

逻辑回归:给不确定性划界的分类大师

想象你是一名医生。面对患者的检查报告&#xff08;肿瘤大小、血液指标&#xff09;&#xff0c;你需要做出一个**决定性判断**&#xff1a;恶性还是良性&#xff1f;这种“非黑即白”的抉择&#xff0c;正是**逻辑回归&#xff08;Logistic Regression&#xff09;** 的战场&a…...

【Linux】C语言执行shell指令

在C语言中执行Shell指令 在C语言中&#xff0c;有几种方法可以执行Shell指令&#xff1a; 1. 使用system()函数 这是最简单的方法&#xff0c;包含在stdlib.h头文件中&#xff1a; #include <stdlib.h>int main() {system("ls -l"); // 执行ls -l命令retu…...

Debian系统简介

目录 Debian系统介绍 Debian版本介绍 Debian软件源介绍 软件包管理工具dpkg dpkg核心指令详解 安装软件包 卸载软件包 查询软件包状态 验证软件包完整性 手动处理依赖关系 dpkg vs apt Debian系统介绍 Debian 和 Ubuntu 都是基于 Debian内核 的 Linux 发行版&#xff…...

3403. 从盒子中找出字典序最大的字符串 I

3403. 从盒子中找出字典序最大的字符串 I 题目链接&#xff1a;3403. 从盒子中找出字典序最大的字符串 I 代码如下&#xff1a; class Solution { public:string answerString(string word, int numFriends) {if (numFriends 1) {return word;}string res;for (int i 0;i &…...

用docker来安装部署freeswitch记录

今天刚才测试一个callcenter的项目&#xff0c;所以尝试安装freeswitch 1、使用轩辕镜像 - 中国开发者首选的专业 Docker 镜像加速服务平台 编辑下面/etc/docker/daemon.json文件为 {"registry-mirrors": ["https://docker.xuanyuan.me"] }同时可以进入轩…...

【开发技术】.Net使用FFmpeg视频特定帧上绘制内容

目录 一、目的 二、解决方案 2.1 什么是FFmpeg 2.2 FFmpeg主要功能 2.3 使用Xabe.FFmpeg调用FFmpeg功能 2.4 使用 FFmpeg 的 drawbox 滤镜来绘制 ROI 三、总结 一、目的 当前市场上有很多目标检测智能识别的相关算法&#xff0c;当前调用一个医疗行业的AI识别算法后返回…...

JS手写代码篇----使用Promise封装AJAX请求

15、使用Promise封装AJAX请求 promise就有reject和resolve了&#xff0c;就不必写成功和失败的回调函数了 const BASEURL ./手写ajax/test.jsonfunction promiseAjax() {return new Promise((resolve, reject) > {const xhr new XMLHttpRequest();xhr.open("get&quo…...

Kubernetes 网络模型深度解析:Pod IP 与 Service 的负载均衡机制,Service到底是什么?

Pod IP 的本质与特性 Pod IP 的定位 纯端点地址&#xff1a;Pod IP 是分配给 Pod 网络命名空间的真实 IP 地址&#xff08;如 10.244.1.2&#xff09;无特殊名称&#xff1a;在 Kubernetes 中&#xff0c;它通常被称为 “Pod IP” 或 “容器 IP”生命周期&#xff1a;与 Pod …...