十五、ES6新增特性

158 阅读5分钟

1. let 块级作用域 ---> 用来声明变量

  • 值类型和引用类型都可以。 ---> 可以修改
  • 可以防止变量提升。 ---> 先声明后使用
  • 块级作用域。 ---> 一个大括号{}的内部就是块级作用域。
  • for 循环使用 let 可以防止 i 泄露

【注】在用 for 循环绑定事件时用 let 声明 i ,不用藏值,就可以点击并打印出 i

QQ图片20230411212441.png

2. const ---> 用来声明常量

  • 值类型和引用类型都可以。---> 值类型不可以修改;引用类型的地址不能修改,值可以修改
  • 可以防止变量提升 ---> 先声明后使用
  • 块级作用域。 ---> 一个大括号{}的内部就是块级作用域。

3. eval()的用法

3.1 eval(str) ---> 把字符串解析成js代码(不安全,少用)。类似JSON.parse(str)

QQ图片20230411214149.png

3.2 eval(str) ---> str里面加"use strict" 形成eval函数作用域

QQ图片20230412133912.png

【注】4种作用域:
    1. 全局作用域
    2. 局部作用域
    3. letconst的块级作用域
    4. eval'use strict')形成的函数作用域

4. ES6增强 —— 字符串

4.1 字符串模板 `` ---> 支持字符串插值

4.2 includes() ---> 判断是否有指定的子字符串

  • 参数:子字符串
  • 返回值:找到了返回true,找不到返回false

4.3 startsWith() ---> 判断指定的子字符串是否在头部

  • 参数:子字符串
  • 返回值:在头部返回true,否则返回false

4.4 endsWith() ---> 判断指定的子字符串是否在末尾

  • 参数:子字符串
  • 返回值:在末尾返回true,否则返回false

4.5 repeat() ---> 重复字符串

  • 参数:重复次数
  • 返回值:重复的字符串

5. ES6增强 —— 数组

5.1 Array.from() ---> 将伪数组转换为真数组

5.2 Arra.of() ---> 将一组值转换为真数组

5.3 find() ---> 数组的高阶方法。找出第一个符合条件的数组成员。

  • 参数:回调函数
  • 返回值:返回第一个符合条件的元素,若都不符合条件,返回undefined
  • 应用:用于dom的查找、删除操作

5.4 findIndex() ---> 数组的高阶方法。找出第一个符合条件的成员下标。

  • 参数:回调函数
  • 返回值:返回第一个符合条件的元素的下标,若都不符合条件,返回-1。

6. ES6增强 —— 函数

6.1 函数的默认参数

给函数的形参赋值

 function fn(n=2){}; // 2就是函数的默认参数

6.2 箭头函数 ()=>{}

  • ① 如果只有一个参数,可以省略小括号。 a => {return res;}

    • 特殊情况:如果只有一个参数,参数带有默认参数,必须要有小括号。 (a = 2) => {return res;}
  • ② 如果函数体只有return res;这一句话,可以省略return和{}。 (a,b) => res;

    • 特殊情况:如果函数体只有return res;这一句话,res是带有{}的对象,要用小括号包起来。(因为此时的{}会被认为是函数体的{}) (a,b) => ({name:'A'});
  • ③ 箭头函数的this指向上下文对象

  • ④ 箭头函数不能被new,因为箭头函数没有构造器。

  • ⑤ 箭头函数没有原型方法。

QQ图片20230412213508.png

6. ES6增强 —— 对象

6.1 对象的属性简写

let name = '刘德华' ;
let obj ={ name:name } ; 
// 等价于 
let obj = { name } ; // 键名和键值一样可以简写

6.2 对象的方法简写

let obj = {
    run:function(){};
}

// 等价于 

let obj = {
    run(){}; // 可以省略 :function
}

// 等价于

let a = 'run';
let obj = {
    [a](){}; 
}

6.3 对象的新增方法

Object.is( , ) ---> 恒等于(es6新增)

    console.log(Object.is(1,1)); // true
    console.log(Object.is(1,"1")); // false
    console.log(Object.is(+0,-0)); // false
    console.log(Object.is(NaN,NaN)); // true

Object.assign() ---> 合并,拷贝(es6新增)

  • 作用:合并多个js对象。
  • 参数:第一个参数为目标对象,后边的参数为源对象。
  • 返回值:返回第一个参数

【Object.assign()注意点】

  • 后面的源对象中有同名的属性/方法,后覆盖前。
  • assign不合并不可枚举的属性
  • 拷贝:var objRepeat = Object.assign({}, obj);

Object.keys() ---> 获取对象的键(es6前就有的方法)

Object.values() ---> 获取对象的值(es6新增)

Object.entries() ---> 获取对象的键与值(es6新增)

7. ES6新增 —— 解构赋值和对称赋值

作用:将对象或者数组“拆包”至一系列变量中。

var obj = {name:'胡歌',age:20,sex:'男',child:{name:'胡小歌',age:2,sex:'男',}}
var {name:name999,age,sex,child:{name,age,sex}} = obj
console.log(name,age);//胡小歌 2
console.log(name999);//胡歌   name999是别名

8. ES6新增 —— 展开运算符...

8.1 应用1:数组和对象的拷贝

    var arr1 = [...arr];
    var obj1 = {...obj};

8.2 应用2:函数传参

function fn(a,b,c,d){
r arrNorepea    return a+b+c+d;
}
fn(...arr);

8.3 应用3:数组去重

vat = [...new Set()];

9. ES6新增 —— ESM模块化

QQ图片20230417210647.png

10. ES6新增 —— Map超对象

10.1 特点:键可以是任意类型

10.2 创建一个超对象:

var map = new Map();

10.3 Map的属性/方法;

  • get() 获取

  • set() 设置

      var arr = [];    //键名为引用类型的时候,最好先设置一下,方便get到同一个地址
      map.set(arr,[11,22,33]);
    
  • delete() 删除

  • has() 判断是否存在

  • clear() 清除

  • keys()

  • values()

  • entries() 键和值

  • 遍历forEach、for...of

  • size 返回成员总数

11. ES6新增 —— Set集合

11.1 特点:类似数组,成员唯一

11.2 创建一个Set集合:

var set = new Set();

11.3 Set的属性/方法;

  • size 返回成员总数
  • add() 添加
  • has() 判断是否存在
  • delete() 删除
  • clear() 清除
  • keys()
  • values()
  • entries() 键和值
  • 遍历 forEach()

12. ES6新增 —— WeakSet集合

12.1 特点:成员只能是对象,成员唯一

12.2 创建一个WeakSet集合:

var weakSet = new WeakSet();

12.3 WeakSet的属性/方法;

  • add() 添加
  • has() 判断是否存在
  • delete() 删除

13. ES6新增 —— Symbol 唯一标识符(值类型)

13.1 Symbol特点:

  • 提供独一无二的值
  • Symbol 值作为对象属性名时,不能用点运算符,要用中括号表示法
  • Symbol 值作为对象属性名时,该属性不会出现在for...infor...of循环中

13.2 创建一个标识

let s1= Symbol(); ---> 创建Symbol不能使用new

13.3 Symbol的应用场景

  • ① Symbol() 保证switch分支的唯一性
  • ② Symble.for() 设置私有属性
  • ③ Symbol.iterator 给对象手动添加迭代器

QQ图片20230417210647.png

QQ图片20230417221655.png

QQ图片20230417221701.png

14. ES6新增 —— 类继承

CSS三大特性:① 层叠性;② 优先性;③ 继承性

继承:子类拥有父类的属性和方法

QQ图片20230417222547.png