ES6

严格模式

’use strict’;

use:使用 strict:严格的

特点:

  1. 如果写在全局,则全局是严格模式,如果写在函数里,则函数内部是严格模式。
  2. ’use strict‘一定要写在全局或局部的开头
  3. 必须使用变量符,未声明会报错
  4. 在函数中,不能使用this去指向全局对象
  5. arguments.callee不能使用
  6. 当使用es6语法时,默认进入严格模式

优点:

  1. 消除代码运行的不安全之处,保证代码运行的安全
  2. 提高编辑器(编写代码的程序)效率,增加运行速度
  3. 为新版本的JS做铺垫

模板字符串

``(反引号)

  1. 变量和字符串连接的问题
  2. 多行字符串不需要多做+连接
let a = '一';
`...${a}大段文字...`

扩展运算符

(它好比 rest 参数的逆运算,将一个数组转为用逗号分隔的参数序列)

<script>
    // 场景一:数组中应用
    let arr = [1,2,3];
    let arr2 = [...arr];	

    let arr-x = document.querySelector('div');
    let arr-y = [...arr-x]	// 伪数组转化为真数组
    
    let arr3 = [1,...arr2,2];	// 数组转序列
    
    let myMax = Math.max(arr);	// 求数组最大值
</script>
<script>
	// 场景二: 函数中使用
    function play(...arr){
        console.log(arr);	// [1,2,3]
    }
    play(1,2,3);
    
    function play(name,...arr){		// 如果相传别的参数,将可变参数放到最后 
        console.log(name);	// '数组'
        console.log(arr);	// [1,2,3]
    }
    play('数组',1,2,3);
</script>
<script>
	// 场景三:在对象中使用
    let obj = {a : 3, b : 4,};
    let obj2 = {...obj};
</script>

参数默认值

<script>
    function play(a = 1,b = 2){}
    play();	// 不穿值的时候,使用默认值
    play(underfind,null); // (1,null) 传的值为undefined时,与没传效果相同。但是如果传null,则传递成功。
</script>

解构赋值

<script>
	// 字符串:"how are you doing?" 将每个单词放到一个单独的变量里。
    let str = 'how are you doing?';
    let [one,two,there] = str.split(' ');	// 将用空格分割的每个单词都赋给对应的变量;
    
    // 留空,获取指定位置的元素
    let {,two,} = str.split(' ');
    
    // 结合扩展运算符
    let [first , ...arr] = str.split();
    console.log(arr instanceof Array);
    
    // 交换变量(不使用第三方中转)
    let a = 1;
    let b = 2;
    	// 方法一
    a = a + b;
    b = a - b;
    a = a - b;
    	// 方法二
    [a , b] = [b , a]
    	// 方法三:数组运算法
    a = [b,(b=a)][0]
    	// 方法四:数组异或法
    a = a ^ b
    b = b ^ a
    a = a ^ b 
    
    // 对象的解构
	let animal = {
        type: "猫科动物",
        color: "黄色",
        age: 3,
        name: "小黄",
	};
    let {type , color} = animal;	// 变量名必须与对象的属性名一至,否则而会报错
    
    // 函数形参的解构
    function play ({age}){}	// 此时形参为3【如果形参过多可以直接将对象名当作形参传入】
    play(animal);
</script>

Set集合

iterable是ES6标准引入的新的类型。而ArrayMapSet都属于iterable类型

  1. Set声明:let mySet = new Set();
  2. 增:mySet.add = XXX;
  3. 删:mySet.delete = XXX;
  4. 找:mySet.has(XXX);
  5. 改:删老的,加新的
  6. 清空: mySet.clear()
  7. 遍历:mySet.forEach()
  8. 遍历:for(let i of mySet){ // 只输出值}
  9. 返回所有的数组集合:mySet.keys() / mySet.values()

数组去重:利用Set值为一的方式,将数组转化为Set集合(let set = new Set(arr)),利用其唯一值的特性去重,然后利用Array.from(set)将Set集合转回数组。

    <script>
      // Set:没有下标,值是唯一的,不会重复(没有属性名,只有属性值)
      // 1.创建Set
      let mySet = new Set();
      // let obj={
      //   name:'张三'
      // }
      // console.log(obj);
      // 2.给集合添加值
      mySet.add("张三");
      mySet.add("李四");
      mySet.add("王五");
      mySet.add(true);
      mySet.add(null);
      mySet.add(undefined);
      console.log(mySet);
      // 3.删除值
      mySet.delete("李四");
      // 4.判断某个值是否存在
      console.log(mySet.has(null));
      // 5.keys()和values()返回所有的数组集合
      console.log(mySet.keys());
      console.log(mySet.values());
      // 6.清空
      // mySet.clear();
      // console.log(mySet);
      // 7.遍历 forEach()
      mySet.forEach((item) => {
        console.log(item);
      });

      // i指的是属性值
      for (let i of mySet) {
        console.log(i);
      }
      // Set没有属性名,只有属性值(无效果)
      for (let i in mySet) {
        console.log(i);
      }

      // 数组去重
      var list = ["jack", "rose", "Frank", "Peter", "Tim", "rose", "Frank"];
      var obj = new Set(list);
      // Array.from()可以将伪数组和Set转化为数组
      Array.from(obj);
      console.log(obj);
    </script>
面试题:数组去重
var arr=[...];
let obj = new Set(arr)
// Array.form()可以将伪数组,Set转化为数组
console.log(Array.form(obj))

Map集合

以键值对的方式存储,键是唯一的,值可以重复

  1. 创建:let myMap = new Map();
  2. 增:myMap.set(‘键’ , ‘值’);
  3. 改:myMap.set(‘键’ , ‘新值’);
  4. 查:myMap.has(‘键’); 注:输入’键’,获取’值’
  5. 删:myMap.delete(‘键’);
  6. 清空:myMap.clear();
  7. 获取所有的键:myMap.keys();
  8. 获取所有的值:myMap.values();
  9. 遍历:myMap.forEach((key , value)=>{})
  10. 遍历:for(let i of myMap){console.log()} 注:输出n个数组,每个数组包含两个值(键,键对应的值)
  11. 获取所有的键值对:myMap.entries()
    <script>
      // Map:以键值对(key - value)的方式存储,key不可以重复,是无序的
      // 创建
      let myMap = new Map();
      // 增
      myMap.set("张三", "法外狂徒");
      myMap.set(true, "成功");
      myMap.set(123, 456);
      console.log(myMap);
      // 改
      myMap.set("张三", "速速枪毙");
      // 查(输入'键',获取'值')
      console.log(myMap.get(true));
      // 删除
      myMap.delete(123);
      // 清空
      // myMap.clear();
      // console.log(myMap);
      // 根据key判断value是否存在
      console.log(myMap.has(false));
      // 返回Map里的所有key值
      console.log(myMap.keys());
      // 返回Map里的所有value值
      console.log(myMap.values());
      // 返回Map里的所有键值对
      console.log(myMap.entries());
      // 遍历Map
      myMap.forEach((key, value) => {
        console.log(key, value);
      });
      // 遍历
      for(let i of myMap){
        console.log(i);
      }
    </script>

数组、Set、Map 对比

Array有序集合下标唯一,值可重复,下标是有序的
Set无序集合值维一,没有下表
Map无序集合键值对,键唯一,值可重复
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值