Es6

GitbookKb2021-01-06


📑 rest operator, spread operator


  • 箭头函数:const sum (…nums) => console.log(nums)
  • 声明函数:function sum() { console.log(arguments) }
  • rest operator puts the separate data values in one array sum(1,2,3), spread operator does exactly the opposite: it spreads the array into separate data values.[...ary, 5,6]
  • Q: Can we use arguments object in arrow => function? A: can’t.
  • Q: which is the best way to create new array with assignment? A: spread operator

    let arr1 = [1, 2, 3, 4];
    let arr2 = [...arr1, 5, 6];
  • for function arguments, consider rest operator

📑 search summary


  • indexOf
  • lastIndexOf
  • includes: true/false
  • findIndex: arry.findInex(element => element > 3000)
  • findLastIndex
  • find: 1st/undefined
  • filter: []
  • some/every
  • test/match

findIndex() returns ‘undefined’ if there is no true value matched.

📑 Object literal


const name = "accessCode";
const obj = {
	[name]: uuid(10),
	sku: `Apple-${Math.random(6)}`,
	["get" + "Date"]() {
		console.log(obj.accessCode);
	},
};

📑 Symbol 是什么,有什么作用?


Symbol 是 ES6 引入的第七种原始数据类型,所有 Symbol()生成的值都是独一无二的,可以从根本上解决对象属性太多导致属性名冲突覆盖的问题。对象中 Symbol()属性不能被 for…in 遍历,但是也不是私有属性。

📑 Set 是什么,有什么作用?


Set 是 ES6 引入的一种类似 Array 的新的数据结构,Set 实例的成员类似于数组 item 成员,区别是 Set 实例的成员都是唯一,不重复的。这个特性可以轻松地实现数组去重。 Set 本身是一个构造函数,用来生成 Set 数据结构。Set 函数可以接受一个数组(或者具有 iterable 接口的其他数据结构)作为参数,用来初始化。

📑 Map 是什么,有什么作用?


Map 是 ES6 引入的一种类似 Object 的新的数据结构,Map 可以理解为是 Object 的超集:

  • 一个 Object 的键只能是字符串或者 Symbols,但一个 Map 的键可以是任意值。
  • Map 中的键值是有序的(FIFO 原则),而添加到对象中的键则不是。
  • Map 的键值对个数可以从 size 属性获取,而 Object 的键值对个数只能手动计算。
  • Object 都有自己的原型,原型链上的键名有可能和你自己在对象上的设置的键名产生冲突。

📑 Reflect 是什么,有什么作用?


Reflect 是 ES6 引入的一个新的对象,他的主要作用有两点,一是将原生的一些零散分布在 Object、Function 或者全局函数里的方法(如 apply、delete、get、set 等等),统一整合到 Reflect 上,这样可以更加方便更加统一的管理一些原生 API。其次就是因为 Proxy 可以改写默认的原生 API,如果一旦原生 API 别改写可能就找不到了,所以 Reflect 也可以起到备份原生 API 的作用,使得即使原生 API 被改写了之后,也可以在被改写之后的 API 用上默认的 API。

📑 Iterator


  • Set、Map 都不能用 for 循环遍历
  • 为 Set、Map、Array、Object 新增一个统一的遍历 API
  • ES6 给 Set、Map、Array、String 都加上了[Symbol.iterator]方法,且[Symbol.iterator]方法函数也符合标准的 Iterator 接口规范,所以 Set、Map、Array、String 默认都是可以遍历的

📑 Generator 函数是什么,有什么作用?


如果说 JavaScript 是 ECMAScript 标准的一种具体实现、Iterator 遍历器是 Iterator 的具体实现,那么 Generator 函数可以说是 Iterator 接口的具体实现方式。

执行 Generator 函数会返回一个遍历器对象,每一次 Generator 函数里面的 yield 都相当一次遍历器对象的 next()方法,并且可以通过 next(value)方法传入自定义的 value,来改变 Generator 函数的行为。

Generator 函数可以通过配合 Thunk 函数更轻松更优雅的实现异步编程和控制流管理。

async 函数可以理解为内置自动执行器的 Generator 函数语法糖

📑 Proxy 是什么,有什么作用?


Proxy 是 ES6 新增的一个构造函数,可以理解为 JS 语言的一个代理,用来改变 JS 默认的一些语言行为,包括拦截默认的 get/set 等底层方法,使得 JS 的使用自由度更高,可以最大限度的满足开发者的需求。比如通过拦截对象的 get/set 方法,可以轻松地定制自己想要的 key 或者 value。下面的例子可以看到,随便定义一个 myOwnObj 的 key,都可以变成自己想要的函数。

📑 Object


  • ES6 在 Object 原型上新增了is()方法,做两个目标对象的相等比较,用来完善’===‘方法。’===‘方法中 NaN === NaN //false 其实是不合理的,Object.is 修复了这个小 bug。(Object.is(NaN, NaN) // true)
  • ES6 在 Object 原型上新增了assign()方法,用于对象新增属性或者多个对象合并。
  • ES6 在 Object 原型上还新增了Object.keys()Object.values()Object.entries()方法,用来获取对象的所有键、所有值和所有键值对数组。