《ECMAScript 6 入门》快记

6 阅读4分钟

变量的解构赋值

  1. 数组的解构赋值
  2. 对象的解构赋值
  3. 字符串的解构赋值
  4. 数值和布尔值的解构赋值
let {toString: s} = 123;
s === Number.prototype.toString // true

let {toString: s} = true;
s === Boolean.prototype.toString // true
  1. 函数参数的解构赋值

数值的扩展

  1. Number.isFinite(), Number.isNaN()
  2. Number.parseInt(), Number.parseFloat()
  3. Number.isInteger()
  4. Number.EPSILON
  5. 安全整数和 Number.isSafeInteger()
  6. Math 对象的扩展
  7. BigInt 数据类型

字符串的新增方法

  1. String.fromCodePoint()
  2. String.raw()
  3. 实例方法:codePointAt()
  4. 实例方法:normalize()
  5. 实例方法:includes(), startsWith(), endsWith()
  6. 实例方法:repeat()
  7. 实例方法:padStart(),padEnd()
  8. 实例方法:trimStart(),trimEnd()
  9. 实例方法:matchAll()
  10. 实例方法:replaceAll()
  11. 实例方法:at()
  12. 实例方法:toWellFormed()

对象

  1. 属性的简洁表示法
  2. 属性名表达式
  3. 方法的 name 属性
  4. 属性的可枚举性和遍历

有四个操作会忽略enumerablefalse的属性。

  • for...in循环:只遍历对象自身的和继承的可枚举的属性。
  • Object.keys():返回对象自身的所有可枚举的属性的键名。
  • JSON.stringify():只串行化对象自身的可枚举的属性。
  • Object.assign(): 忽略enumerablefalse的属性,只拷贝对象自身的可枚举的属性。

ES6 一共有 5 种方法可以遍历对象的属性。

(1)for...in

for...in循环遍历对象自身的和继承的可枚举属性(不含 Symbol 属性)。

(2)Object.keys(obj)

Object.keys返回一个数组,包括对象自身的(不含继承的)所有可枚举属性(不含 Symbol 属性)的键名。

(3)Object.getOwnPropertyNames(obj)

Object.getOwnPropertyNames返回一个数组,包含对象自身的所有属性(不含 Symbol 属性,但是包括不可枚举属性)的键名。

(4)Object.getOwnPropertySymbols(obj)

Object.getOwnPropertySymbols返回一个数组,包含对象自身的所有 Symbol 属性的键名。

(5)Reflect.ownKeys(obj)

Reflect.ownKeys返回一个数组,包含对象自身的(不含继承的)所有键名,不管键名是 Symbol 或字符串,也不管是否可枚举。

以上的 5 种方法遍历对象的键名,都遵守同样的属性遍历的次序规则。

  • 首先遍历所有数值键,按照数值升序排列。
  • 其次遍历所有字符串键,按照加入时间升序排列。
  • 最后遍历所有 Symbol 键,按照加入时间升序排列。
  1. super 关键字
  2. 对象的扩展运算符

对象新增方法

  1. Object.is()
  2. Object.assign()
  3. Object.getOwnPropertyDescriptors()
  4. __proto__属性,Object.setPrototypeOf(),Object.getPrototypeOf()
  5. Object.keys(),Object.values(),Object.entries() 返回数组
  6. Object.fromEntries()
  7. Object.hasOwn()

数组

  1. 扩展运算符
  2. Array.from()
  3. Array.of()
  4. 实例方法:copyWithin()
  5. 实例方法:find(),findIndex(),findLast(),findLastIndex()
  6. 实例方法:fill()
  7. 实例方法:entries(),keys() 和 values() 返回迭代对象
  8. 实例方法:includes()
  9. 实例方法:flat(),flatMap()
  10. 实例方法:at()
  11. 实例方法:toReversed(),toSorted(),toSpliced(),with()
  12. 实例方法:group(),groupToMap()

函数

  1. 函数参数的默认值
  2. rest 参数
  3. 严格模式
  4. name 属性
  5. 箭头函数
  6. 尾调用优化

Iterator 和 for...of 循环

(Symbol.iterator属性)

原生具备 Iterator 接口的数据结构如下。

  • Array
  • Map
  • Set
  • String
  • TypedArray
  • 函数的 arguments 对象
  • NodeList 对象

Set 和 Map 数据结构

Set

Set 结构的实例有以下属性。

  • Set.prototype.constructor:构造函数,默认就是Set函数。
  • Set.prototype.size:返回Set实例的成员总数。

Set 实例的方法分为两大类:

操作方法(用于操作数据)和遍历方法(用于遍历成员).

  • Set.prototype.add(value):添加某个值,返回 Set 结构本身。
  • Set.prototype.delete(value):删除某个值,返回一个布尔值,表示删除是否成功。
  • Set.prototype.has(value):返回一个布尔值,表示该值是否为Set的成员。
  • Set.prototype.clear():清除所有成员,没有返回值。

遍历方法(用于遍历成员

Set 结构的实例有四个遍历方法,可以用于遍历成员。

  • Set.prototype.keys():返回键名的遍历器
  • Set.prototype.values():返回键值的遍历器
  • Set.prototype.entries():返回键值对的遍历器
  • Set.prototype.forEach():使用回调函数遍历每个成员
Set.prototype[Symbol.iterator] === Set.prototype.values
// true

ES2025 为 Set 结构添加了以下集合运算方法。

  • Set.prototype.intersection(other):交集
  • Set.prototype.union(other):并集
  • Set.prototype.difference(other):差集
  • Set.prototype.symmetricDifference(other):对称差集
  • Set.prototype.isSubsetOf(other):判断是否为子集
  • Set.prototype.isSupersetOf(other):判断是否为超集
  • Set.prototype.isDisjointFrom(other):判断是否不相交

Map

方法属性

  • size
  • Map.prototype.set(key, value)
  • Map.prototype.get(key)
  • Map.prototype.has(key)
  • Map.prototype.delete(key)
  • Map.prototype.clear()

遍历方法

  • Map.prototype.forEach()
  • Map.prototype.values()
  • Map.prototype.entries()
  • Map.prototype.keys()
map[Symbol.iterator] === map.entries
// true