ES6+ 面试常问题

news2024/11/23 6:42:56

一、let const var 的区别

1. var:
  1. 没有块级作用域的概念,有函数作用域和全局作用域的概念
  2. 全局作用域性下创建变量会被挂在到 windows 上
  3. 存在变量提升
  4. 同一作用域下,可以重复赋值
  5. 创建未初始化,值为 undefined
2. let:
  1. 块级作用域
  2. 同一作用域性爱同一变量不允许重复声明
  3. 不存在变量提升
  4. 块级作用域下。在声明之前访问会有一个暂时性死区的专属报错
3. const:
  1. const 创建常量
  2. 创建的常量是指向的内存地址是不变的
  3. 若创建的是基本数据类型,则内存地址指向的就是数据,不可变
  4. 若创建的是引用类型数据,则内存地址中存放的是一个指针,指向一个对象
  5. 这里的指针在前端中被称为 ”引用“
  6. 这个对象属性是可以改变的

二、Promise 及其常用 API

1. Promise
1.1 then
  1. 一个有 then 方法的对象。有三种状态:
  2. 被 resolve 或者 resolve 之前处于 pending 状态。
  3. pending 可以用过 resolve 转换为 fulfilled 状态
  4. pending 也可以由 reject 转换为 rejected 状态
1.2 catch 方法
  • 捕获错误
1.3 finally 方法
  • then 方法或 catch 方法执行后执行
1.4 then 方法的链式调用
  1. 第一个 then 方法中回调函数的返回值,就是第二个 then 方法中形参的值

  2. 第二个 then 方法中 return 的返回值,会被后续的 then 方法使用

2. Promise.all
  • 可以同时请求多个接口,并且接口全部请求完毕后返回
2.1 Promise.allSettled
  1. 等待所有传入的 Promise 对象都完成,然后返回一个包含所有 Promise 对象状态的数组
  2. 在数组中使用 map,添加 catch,请求时,哪个报错就会返回 catch 中的值。
  3. 用来处理多个 Promise 对象,并根据它们的状态进行不同的处理
2.2 Promise.allSettled 方法与 Promise.all 方法的区别
  • Promise.allSettled 方法会返回一个包含所有 Promise 对象状态的数组
  • Promise.all 方法只会返回一个包含所有 Promise 对象结果的数组。
2.3 Promise.race
  • 该方法会等待所有传入的 Promise 对象中的第一个完成,然后返回该 Promise 对象的结果。
  • 如果所有 Promise 对象都被拒绝,则 Promise.race 方法会返回第一个被拒绝的 Promise 对象的错误。

三、Set 和 Map 对比

1. Set
  • 创建使用 new 来实例化,如 new Set()
1.1 set 方法
  • has,判断 set 中是否存在某条数据并返回 true/false
  • add,添加一条数据,到集合的末尾
  • clear,清空整个集合
  • forEach,循环遍历每一项,set 没有索引,所以第二个参数代表数据
  • size,集合数量
  • delete,删除某一项
  • keys & values,都是返回一个迭代的类数组对象,这两个值是一样的

在这里插入图片描述

2. Map
  • 存储键值对的集合,且键不可重复
2.1 Map 的方法
  • keys,返回键的类数组对象
  • values,返回值的类数组对象
  • keys 与 values:set,map 使用 set 方法来添加或者修改数据
    其他方法与 set 类似

在这里插入图片描述

四、localStorage、sessionStorage、cookie 的异同

1. cookie
  • 大小:4k
  • 通信:会参与到与服务端请求的通信中
  • 时效性:根据服务端设置的时间过期
  • tab 共享:同源窗口共享
2. localStorage
  • 大小:5m
  • 通信:单纯前端存储,不参与服务端通信
  • 时效性:持久化保存数据(关闭浏览器或者手动清除)
  • tab 共享:同源窗口支持共享
3. sessionStorage
  • 大小:5m
  • 通信:不支持
  • 时效性:页签级会话标签
  • tab 共享:不支持跨 tab 共享
4. sessionStorage 与 localStorage
  • 共同点:都保存在浏览器端,遵循 同源策略 。
  • 不同点:作用域不同

五、扩展运算符 …

1. 等号左边:
  • let [a, ...b] = [1, 3, 5]
    将剩余数据打包到一个新的数组中
2. 等号右边
  • 可以做解构
3. 形参
  • 将传递的参数打包到一个数组中

六、Symbol 数据结构

  • 原始数据类型 Symbol,表示独一无二的值

  • 用来定义对象的私有变量

  • 定义的私有对象是不可变的,并且不能被序列化
    const myPrivateVariable = Symbol('myPrivateVariable');

  • 也可以创建键名(作为唯一键名使用)

const myObject = {
  [Symbol('myKey')]: 'myValue',
};

总结:它可以用于创建私有变量、不可变对象和键名。

七、async/await

  • 用同步的方式,执行异步操作
  • await 只能在 async 中使用(ES2021 中已经支持顶层 await)
  • await 的返回值是一个 Promise 对象
  • 注意多个 await 执行时,一个 await 报错,后续的 await 都不会执行
  • 可以使用 try catch 包裹报错的 await
  • 更加优雅的处理了 Promise.then 的链式调用

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

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

相关文章

2023年末,软件测试面试题总结与分享

大家好,最近有不少小伙伴在后台留言,得准备年后面试了,又不知道从何下手!为了帮大家节约时间,特意准备了一份面试相关的资料,内容非常的全面,真的可以好好补一补,希望大家在都能拿到…

天擎终端安全管理系统clientinfobymid存在SQL注入漏洞

产品简介 奇安信天擎终端安全管理系统是面向政企单位推出的一体化终端安全产品解决方案。该产品集防病毒、终端安全管控、终端准入、终端审计、外设管控、EDR等功能于一体,兼容不同操作系统和计算平台,帮助客户实现平台一体化、功能一体化、数据一体化的…

《PCI Express体系结构导读》随记 —— 第I篇 第1章 PCI总线的基本知识(16)

接前一篇文章:《PCI Express体系结构导读》随记 —— 第I篇 第1章 PCI总线的基本知识(15) 1.3 PCI总线的存储器读写总线事务 1.3.5 Delayed传送方式 如前文所述,当处理器使用Non-Posted总线周期对PCI设备进行操作、或者PCI设备使…

Android MVVM 写法

前言 Model:负责数据逻辑 View:负责视图逻辑 ViewModel:负责业务逻辑 持有关系: 1、ViewModel 持有 View 2、ViewModel 持有 Model 3、Model 持有 ViewModel 辅助工具:DataBinding 执行流程:View &g…

linux源码编译升级安装openssl3.0.1导致系统启动失败的问题解决

前两天在安装curl的时候,提示openssl版本太老了,原有的版本是openssl1.0的版本,需要将其升级到openssl3的版本。 直接使用命令行sudo apt install默认安装的还是openssl1.1.1版本,因此决定使用源码自行安装。 具体的安装过程就不赘…

webpack打包批量替换路径(string-replace-webpack-plugin插件)

string-replace-webpack-plugin 是一个用于在 webpack 打包后的文件中替换字符串的插件。它可以用于将特定字符串替换为其他字符串,例如将敏感信息从源代码中移除或对特定文本进行本地化处理。比如文件的html、css、js中的路径地址想批量更改一下 http://localhost:…

海德堡UV灯电源维修eta Plus Elc PE22-400-210

uv灯电源维修故障包括: 1、电压不稳:检查uv打印机的电压,设置一个稳压箱即可。 2、温度过高:uv打印机温度过高也会影响uv灯,可以更换为水冷式循环降温。 3、水箱里的信号线接触不好:将两边的信号线对调&…

leetcode刷题记录07(2023-04-30)【二叉树展开为链表 | 买卖股票的最佳时机 | 二叉树中的最大路径和(递归) | 最长连续序列(并查集)】

114. 二叉树展开为链表 给你二叉树的根结点 root ,请你将它展开为一个单链表: 展开后的单链表应该同样使用 TreeNode ,其中 right 子指针指向链表中下一个结点,而左子指针始终为 null 。 展开后的单链表应该与二叉树 先序遍历 顺…

ArcGIS批量计算shp面积并导出shp数据总面积(建模法)

在处理shp数据时, 又是我们需要知道许多个shp字段的批量计算,例如计算shp的总面积、面积平均值等,但是单个查看shp文件的属性进行汇总过于繁琐,因此可以借助建模批处理来计算。 首先准备数据:一个含有多个shp的文件夹。…

前后端分离nodejs+vue+ElementUi网上订餐系统69b9

课题主要分为两大模块:即管理员模块和用户模块,主要功能包括个人中心、用户管理、菜品类型管理、菜品信息管理、留言反馈、在线交流、系统管理、订单管理等; 运行软件:vscode 前端nodejsvueElementUi 语言 node.js 框架:Express/k…

Lumerical------按键中断程序执行

Lumerical------中断程序执行 引言正文 引言 在 Lumerical 中,很多时候我们需要通过 sweep 的方式来获取我们想要的结果,然而,有时候当我们运行程序后发现书写的脚本有问题时,我们想要强行终止程序的执行,该怎么办呢&…

代码随想录-刷题第四十二天

0-1背包理论基础 0-1背包问题介绍 0-1背包问题:有n件物品和一个最多能背重量为w 的背包。第i件物品的重量是weight[i],得到的价值是value[i] 。每件物品只能用一次,求解将哪些物品装入背包里物品价值总和最大。 0-1背包问题可以使用回溯法进…

Collector收集器的高级用法

Collectors收集器的高级用法 场景1:获取关联的班级名称 原先如果需要通过关联字段拿到其他表的某个字段,只能遍历List匹配获取 for (Student student : studentList) {Long clazzId student.getClazzId();// 遍历班级列表,获取学生对应班级…

【ArkTS入门】ArkTS开发初探:语言特点和开发特点

什么是ArkTS? ArkTS是一个为鸿蒙组件而生的框架,语法亲人好用。基于TypeScript,ArkTS拓展了声明式UI、状态管理等的能力,从本质上来讲,是TypeScript的扩展,主要服务于前端。 ArkTS的开发可以满足“一次开…

vue-cli3/webpack打包时去掉console.log调试信息

文章目录 前言一、terser-webpack-plugin是什么?二、使用配置vue-cli项目 前言 开发环境下,console.log调试信息,有助于我们找到错误,但在生产环境,不需要console.log打印调试信息,所以打包时需要将consol…

【React源码 - ReactDom.render发生了什么】

在React开发中,在入口文件我们都会执行ReactDom.render来讲整个应用挂载在主document中,那其中发生了什么,React是如何讲我们写的JSX代码,一步一步更新Fiber进而挂载渲染的呢。本文主要是基于react17.0.2的源码以及自己的理解来简…

thinkphp+vue+mysql企业车辆管理系统m117l

“企业车辆管理系统”是运用php语言和vue框架,以Mysql数据库为基础而发出来的。为保证我国经济的持续性发展,必须要让互联网信息时代在我国日益壮大,蓬勃发展。伴随着信息社会的飞速发展,企业车辆管理系统所面临的问题也一个接一个…

大数据背后的绿色收割:基于Hadoop的农产品价格信息智能分析

大数据背后的绿色收割:基于Hadoop的农产品价格信息智能分析 引言正文1. 数据获取与准备2. 数据清洗与处理3. Hadoop数据分析引擎的运用4. MySQL数据库的集成5. 创新性的可视化6. 结论与展望 结语 引言 随着信息技术的不断发展,农业领域也在数字化的浪潮…

C++ Primer Plus----第十二章--类和动态内存分布

本章内容包括:对类成员使用动态内存分配;隐式和显式复制构造函数;隐式和显式重载赋值运算符;在构造函数中使用new所必须完成的工作;使用静态类成员;将定位new运算符用于对象;使用指向对象的指针…

鸿蒙(HarmonyOS 3.1) DevEco Studio 3.1开发环境汉化

鸿蒙(HarmonyOS 3.1) DevEco Studio 3.1开发环境汉化 一、安装环境 操作系统: Windows 10 专业版 IDE:DevEco Studio 3.1 SDK:HarmonyOS 3.1 二、设置过程 打开IDE,在第一个菜单File 中找到Settings...菜单 在Setting...中找到Plugins…