Es6
GitbookKb2021-01-06
📑 rest operator, spread operator
- 箭头函数:const sum (…nums) => console.log(nums)
- 声明函数:function sum() { console.log(arguments) }
rest operatorputs the separate data values in one arraysum(1,2,3),spread operatordoes exactly the opposite: it spreads the array into separate data values.[...ary, 5,6]- Q: Can we use
argumentsobject inarrow =>function? A: can’t. -
Q: which is the best way to create new array with assignment? A:
spread operatorlet arr1 = [1, 2, 3, 4]; let arr2 = [...arr1, 5, 6]; - for
function arguments, considerrest 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()方法,用来获取对象的所有键、所有值和所有键值对数组。
