⚠️ Generate by copilot, need to review and modify
ES6 了解哪些?
- let 和 const
- 箭头函数
- 解构赋值
- 字符串模板
- 对象扩展
- 数组扩展
- 函数扩展
- 类
- 模块化
- Promise
- Generator
- Set 和 Map
- Proxy 和 Reflect
- Symbol
- Iterator
- async/await
- 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 进行特殊处理。
箭头函数的特点
- 箭头函数没有 this, 会捕获其所在上下文的 this 值, 作为自己的 this 值。
- 箭头函数没有 arguments, 但是可以使用 rest 参数代替。
- 箭头函数不能使用 new 关键字调用, 也不能使用 call, apply, bind 方法改变 this 指向。
- 箭头函数没有 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 关键字等待异步操作的结果。