微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

ES6+常用技术点

ES6

1. let和const

  • 不存在变量提升。
  • 暂时性死区(temporal dead zone,简称 TDZ):在代码块内使用const命令和let命令声明变量之前,该变量都不可用
  • 不允许重复声明
    let不允许在相同作用域内,重复声明同一个变量。
  • const 命令
    1).const声明一个只读的常量。一旦声明,常量的值就不能改变
    2).对于const来说,只声明不赋值,就会报错let命令声明变量后可立马赋值或使用时赋值
    3).const的作用域与let命令相同:只在声明所在的块级作用域内有效
    4). const命令声明的常量也是不提升,同样存在暂时性死区,只能在声明的位置后面使用。

2. 解构赋值

1.对象解构

  • 形式:const { x, y } = { x: 1, y: 2 }
  • 认:const { x, y = 2 } = { x: 1 }
  • 改名:const { x, y: z } = { x: 1, y: 2 }

3. 对象扩展

3.1 Object.is(): 对比两值是否相等

const a = NaN;
const b = NaN;
console.log(a == b) // false
console.log(Object.is(a, b));  // true

3.2 object.assign() 合并对象(浅拷贝),返回原对象

const a = {name: '穷哈', age: 18};
const b = {sex: '男', otherName: '拿扎', age: 20};
const c = Object.assign( {}, a, b)
a.name = '热巴'
console.log(c);  // { name: '穷哈', age: 20, sex: '男', otherName: '拿扎' }
// 如果有相同的key,则value为后面的覆盖前面的

4. 数组扩展

4.1 扩展运算符(…)
对象

const a = {name: '穷哈', age: 18};
const b = {sex: '男', otherName: '拿扎', age: 20};
const c = {...a, ...b}
a.name = '热巴'
console.log(c);  // { name: '穷哈', age: 20, sex: '男', otherName: '拿扎' }
// 如果有相同的key,则value为后面的覆盖前面的

数组

const d = ['fuck', 'kao', 'ni', 233];
const e = [233, 7, 45, 'bu']
const f = [...new Set([...d, ...e])]
console.log(f); // ['fuck', 'kao', 'ni',233, 7, 45, 'bu']

4.2 Array.from():
转换具有Iterator接口的数据结构为真正数组,返回新数组

  • 类数组对象:包含length的对象、Arguments对象、NodeList对象
  • 可遍历对象:String、Set结构、Map结构、Generator函数
function getArrayFrom() {
    const arr = Array.from(arguments);
    console.log(Object.prototype.toString.call(arr)); // [object Array]
    console.log(arr) // [ 1, '好的', false ]
}
getArrayFrom(1, '好的', false)

4.3 find(): 返回第一个符合条件的成员

var ages = [3, 10, 18, 20];
function checkAdult(age) {
    return age >= 18;
}
console.log(ages.find(checkAdult)) // 18

4.4 findindex(): 返回第一个符合条件的成员索引值

var ages = [3, 10, 18, 20];
function checkAdult(age) {
    return age >= 18;
}
console.log(ages.findindex(checkAdult)) // 2

5. 箭头函数

箭头函数有几个使用注意点。

  1. 函数体内的this对象,就是定义时所在的对象,而不是使用时所在的对象。并非因为内部有绑定this的机制,而是根本没有自己的this,导致内部的this就是外层代码块的this
  2. 不可以当作构造函数,也就是说,不可以使用new命令。
  3. 不可以使用arguments对象,该对象在函数体内不存在。如果要用,可以用 rest 参数代替。
  4. 不可使用yield命令,因此箭头函数不能用作Generator函数

6. Set

6.1 定义: Set 类似于数组,但是成员的值都是唯一的,没有重复的值。
6.2 声明: const set = new Set(arr)
6.3 属性

  • constructor:构造函数,返回Set
  • size:返回实例成员总数
const arr = [1, 2, 9, 'biu', 'love'];
const set = new Set(arr);
console.log(set.size); // 5

6.4 方法

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

遍历方法(用于遍历成员):

  1. keys() // 返回键名的遍历器
  2. values() // 返回键值的遍历器
  3. entries() // 返回键值对的遍历器
  4. .forEach() // 使用回调函数遍历每个成员

6.5 注意点:

  • Set的遍历顺序就是插入顺序。这个特性有时非常有用,比如使用 Set 保存一个回调函数列表,调用时就能保证按照添加顺序调用
  • Set 结构没有键名,只有键值(或者说键名和键值是同一个值),所以 keys方法和 values方法的行为完全一致。
  • 在 Set 内部,两个NaN是相等的。
  • 添加相同的对象时,会认为是不同的对象。
  • 添加值时不会发生类型转换(5 !== “5”)

7. Map

Map 结构提供了“值—值”的对应,是一种更完善的 Hash 结构实现。如果你需要“键值对”的数据结构,Map 比 Object 更合适。
它类似于对象,也是键值对的集合,但是“键”的范围不限于字符串,各种类型的值(包括对象)都可以当作键。

  1. 定义: 类似于对象的数据结构,成员键是任何类型的值

  2. 声明: const set = new Map(arr)

  3. 入参: 具有Iterator接口且每个成员都是一个双元素数组的数据结构

  4. 属性
    constructor:构造函数,返回Map
    size:返回实例成员总数

  5. 方法

  • get():返回键值对
  • set():添加键值对,返回实例
  • delete():删除键值对,返回布尔
  • has():检查键值对,返回布尔
  • clear():清除所有成员
  • keys():返回以键为遍历器的对象
  • values():返回以值为遍历器的对象
  • entries():返回以键和值为遍历器的对象
  • forEach():使用回调函数遍历每个成员

注意点:

  • 遍历顺序:插入顺序
  • 对同一个键多次赋值,后面的值将覆盖前面的值
  • 对同一个对象的引用,被视为一个
  • 对同样值的两个实例,被视为两个键
  • 键跟内存地址绑定,只要内存地址不一样就视为两个键
  • 添加多个以NaN作为键时,只会存在一个以NaN作为键的值
  • Object结构提供字符串—值的对应,Map结构提供值—值的对应

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐