JavaScript
es6 进阶题

⚠️ Generate by copilot, need to review and modify

ES6 了解哪些?
  1. let 和 const
  2. 箭头函数
  3. 解构赋值
  4. 字符串模板
  5. 对象扩展
  6. 数组扩展
  7. 函数扩展
  8. 模块化
  9. Promise
  10. Generator
  11. Set 和 Map
  12. Proxy 和 Reflect
  13. Symbol
  14. Iterator
  15. async/await
  16. for...of
let 和 const

let 和 const 是 ES6 新增的声明变量的方式, let 用来声明变量, const 用来声明常量。let 和 const 都是块级作用域, 不会发生变量提升, 不允许重复声明。

  • 不会发生变量提升(暂时性死区 )

  • let/const 定义的变量不会出现变量提升, 而 var 定义的变量会提升。

  • 块级作用域 相同作用域中, let 和 const 不允许重复声明, var 允许重复声明。

  • const 声明变量时必须设置初始值, const 声明一个只读的常量, 这个常量不可改变。

  • 暂时性死区: let、const 所声明的变量, 只在命令所在的代码块内有效。声明前调用变量, 都会报错。

js 中为什么会出现变量提升
symbol 和 bigint, 以及他们的作用

symbol 是 ES6 新增的一种基本数据类型, 用来表示独一无二的值, 通常用来作为对象的属性名。symbol 不能使用 new 关键字创建, 会报错。symbol 有一个可选的描述参数, 用来描述 symbol, 但是不会影响 symbol 的唯一性。

bigint 是 ES10 新增的一种基本数据类型, 用来表示大整数, 可以表示任意大的整数, 但是不能和 number 类型进行运算, 也不能和字符串进行运算。

object.is 和 == ===区别

== 和 === 都是用来判断两个值是否相等的, 但是他们的判断方式不同。== 会进行类型转换, 而 === 不会进行类型转换。

object.is 是 ES6 新增的方法, 用来判断两个值是否严格相等, 与 === 类似, 但是 object.is 会对 NaN 和 NaN, +0 和 -0 进行特殊处理。

箭头函数的特点
  1. 箭头函数没有 this, 会捕获其所在上下文的 this 值, 作为自己的 this 值。
  2. 箭头函数没有 arguments, 但是可以使用 rest 参数代替。
  3. 箭头函数不能使用 new 关键字调用, 也不能使用 call, apply, bind 方法改变 this 指向。
  4. 箭头函数没有 prototype 属性。
Generator 函数是什么?作用?原理?实现

Generator 函数是 ES6 新增的一种异步编程解决方案, 用来生成迭代器。Generator 函数使用 function* 关键字声明, 函数内部使用 yield 关键字产出值, 通过 next 方法获取值。

Generator 函数的作用是用来生成迭代器, 用来解决异步编程问题。

Generator 函数的原理是通过生成器函数生成迭代器, 通过 next 方法获取值。

Map 和 Set 区别?和 Object 区别?

Map 和 Set 都是 ES6 新增的数据结构, 用来存储数据。

Map 是一种键值对的集合, 可以使用任意类型的值作为键, 并且可以保持键值对的插入顺序。

Set 是一种值的集合, 只能存储唯一的值, 并且可以保持值的插入顺序。

Object 是一种键值对的集合, 可以使用字符串或者 Symbol 作为键, 并且不保持键值对的插入顺序。

Set, Map, WeakSet 和 WeakMap 区别

Set 是一种值的集合, 只能存储唯一的值, 并且可以保持值的插入顺序。

Map 是一种键值对的集合, 可以使用任意类型的值作为键, 并且可以保持键值对的插入顺序。

WeakSet 是一种值的集合, 只能存储唯一的值, 并且不会被垃圾回收机制考虑。

WeakMap 是一种键值对的集合, 可以使用任意类型的值作为键, 并且不会被垃圾回收机制考虑。

Class 是什么?作用?原理?实现

Class 是 ES6 新增的一种声明类的方式, 用来声明类。Class 本质上是一个函数, 但是不能使用 new 关键字调用, 也不能使用 call, apply, bind 方法改变 this 指向。

Class 的作用是用来声明类, 用来生成实例。

Class 的原理是通过 class 关键字声明类, 类内部使用 constructor 方法构造实例, 类外部使用 extends 关键字继承类。

Promise 是什么?作用?原理?实现

Promise 是 ES6 新增的一种异步编程解决方案, 用来解决回调地狱问题。

Promise 的作用是用来解决回调地狱问题, 使得异步代码更加清晰。

Promise 的原理是通过构造函数生成一个 Promise 对象, Promise 对象有三种状态, 分别是 pending, fulfilled, rejected, 当 Promise 对象的状态发生改变时, 会调用 then 方法的回调函数。

Proxy 是什么?作用?

Proxy 是 ES6 新增的一种代理对象, 用来代理对象的操作。

Proxy 的作用是用来代理对象的操作, 可以对对象的操作进行拦截。

Reflect 是什么?作用?

Reflect 是 ES6 新增的一个静态对象, 用来操作对象。

Reflect 的作用是用来操作对象, 可以对对象的操作进行拦截。

Iterator 是什么, 作用?

Iterator 是 ES6 新增的一种迭代器, 用来遍历数据。

Iterator 的作用是用来遍历数据, 可以遍历数组, 字符串, Map, Set 等数据结构。

字符串/数组等拓展方法

字符串拓展方法: includes, startsWith, endsWith, repeat, padStart, padEnd, trimStart, trimEnd, matchAll, fromCodePoint, codePointAt, normalize, at, String.raw, String.prototype.normalize, String.prototype.at, String.prototype.matchAll, String.prototype.trimStart, String.prototype.trimEnd, String.prototype.padStart, String.prototype.padEnd, String.prototype.repeat, String.prototype.includes, String.prototype.startsWith, String.prototype.endsWith

数组拓展方法: from, of, copyWithin, find, findIndex, fill, entries, keys, values, includes, flat, flatMap, Array.from, Array.of, Array.prototype.copyWithin, Array.prototype.find, Array.prototype.findIndex, Array.prototype.fill, Array.prototype.entries, Array.prototype.keys, Array.prototype.values, Array.prototype.includes, Array.prototype.flat, Array.prototype.flatMap

async/awiat

async/await 是 ES8 新增的一种异步编程解决方案, 用来解决回调地狱问题。

async/await 的作用是用来解决回调地狱问题, 使得异步代码更加清晰。

async/await 的原理是通过 async 关键字声明异步函数, 函数内部使用 await 关键字等待异步操作的结果。