ES6的新特性

一、临时死区

临时死区:用let和const声明的变量,放在‘临时死区’,使用let声明的变量、const声明的常量的作用域不会被提升

二、在循环中使用var的情况

let arr = []
for(var i=0;i<5;i++){ //var定义的i是全局的,若将var改为let,则输出0 1 2 3 4
arr.push(function(){ //arr是一个函数数组:数组的每个单元都是函数
console.log(i)
})
}
 arr.forEach(function(item){ //item是函数:输出5个5
        item()
    })

三、解构赋值:

1.Rest运算符:”…”

 (1)当迭代器使用:会按顺序遍历容器中的元素

 function fun(x,y,z){
            console.log(x,y,z)
        }
        let arr = [11,22,33]
        fun(...arr) //'...'运算符的作用是一个迭代器:依次遍历数组中的元素

​ (2)替代函数的内置属性arguments

function fun(...args){
            console.log(args)
        }
        let arr = [11,22,33]
        fun(arr)

(3)通过解构赋值可以简化变量的赋值

let arr = [11,22,33]
let [a,b,c] = arr
console.log(a)

​ (4)通过”…”把特定的元素放在变量里

let [a,...arr] = [11,22,33]  //将11赋给a,将22,33赋给arr,arr就是一个数组
console.log(a)
console.log(arr)

​ (5)通过解构来交换变量的值

let a = 10
let b = 20; //必须要以分号结尾
[a,b] = [b,a]
console.log(a,b)

2.对象的解构

​ (1)将对象的属性解构出来赋给变量

let obj = {
            id:1001,
            userName:'关羽',
            sex:'男'
        }
        let { id,userName,sex } = obj  //变量名必须和对象的属性名相同
        console.log('编号:',id)
        console.log('用户名:',userName)
        console.log('性别:',sex)

​ (2)解构多层对象

let obj = {
            id:1001,
            userName:'关羽',
            sex:'男',
            score:{
                html: 98,
                css:95,
                js: 85
            }
        }
        let { id,userName,sex,score:{html,css,js} } = obj  //变量名必须和对象的属性名相同
        console.log('编号:',id)
        console.log('用户名:',userName)
        console.log('性别:',sex)
        console.log('css的成绩:',css)

​ (3)在解构时可以给变量取别名

let obj = {
            id:1001,
            userName:'关羽',
            sex:'男',
            score:{
                html: 98,
                css:95,
                js: 85
            }
        }
        let { id:userId,userName:name } = obj  //userId是id的别名,name是userName的别名
        console.log('编号:',userId)
        console.log('用户名:',name)
        console.log('性别:',sex)

3.、模板字符串:使用反引号``和${ 变量名 } 将字符串常量和变量写在一个串里。就不需要使用’+’进行字符串的拼接

4.Symbol类型

​ (1)ES5的数据类型:number、string、boolean、bigint、null、undefined、object

​ (2)ES6新增的Symbol:表示一个唯一的值

​         a、直接创建:let 变量名 = Symbol

        ​ b、间接创建:传字符串 let 变量名 = Symbol(字符串)

5.Set集合:是一种数据结构,里面不能存放重复的值。可以用于数组去重、字符串去重

(1)创建方式:

​ a、使用new运算符:let 变量 = new Set()

​ b、通过数组来创建:let 变量名 = new Set( [1,2,3,5,6] ) ,去除重复的元素

let s1 = new Set() //创建一个空集合
        console.log(s1)
        let arr = [1,2,3,2,0,3,5]
        let s2 = new Set(arr)
        console.log(s2)

​ (2)常用的方法:

        ​ a、add(val):向集合中添加元素

        ​ b、delete(val):删除集合中的元素。删除成功返回true,删除失败返回false

        ​ c、has(val):判断val在集合中是否存在,若存在返回true,不存在返回false

        ​ d、clear():清空集合,没有返回中

        ​ e、values():获取的是集合中所有value

        ​ f、keys():获取集合中的key

强调:Set集合也是key-value格式,它的key和value是相同的

​ (3)属性:size 存放的是集合中元素的个数

​ (4)遍历方法:

        ​ a、for … of

for(let i of s1.keys()){
        console.log(i)
    }

​         b、forEach

s1.forEach(function(value,key){
        console.log(value+'  ----  '+key)
    })

​ (5)集合运算

        ​ a、并集

let setA = new Set([4,5,6])
let setB = new Set([5,6,7])
let bj = new Set([...setA,...setB])
console.log(bj)

        ​ b、交集

let arr = [...setA]  //解构集合setA,将其转换成数组  
       //对arr进行过滤:使用filter函数
       //依次从arr中取出元素传递给item,在函数体内设置筛选条件,将满足条件的元素返回给temp
       let temp = arr.filter(function(item){
           if(setB.has(item)){ 
              return item
           }
       })
    console.log(temp)

        ​ c、差集

let arr = [...setA]  //解构集合setA,将其转换成数组  
       //对arr进行过滤:使用filter函数
       //依次从arr中取出元素传递给item,在函数体内设置筛选条件,将满足条件的元素返回给temp
       let temp = arr.filter(function(item){
           if(setB.has(item)==false){ 
              return item
           }
       })
    console.log(temp)

问题1:创建Set集合时为什么用new运算符?

​ (1)Set是一个构造函数,凡是用构造函数创建对象时都要用new

问题2:Set构造方法的参数为什么是数组或null?

6、WeakSet集合:只是一个对象集合。即集合中只能存放对象。它支持 add,has 和 delete 方法

课堂练习:创建构造函数Student,它的属性有id、name、html、CSS、js。

​ (1)利用该构造函数创建5对象,并将这5个对象存放到Set集合中

​ (2)把css成绩不及格的对象挑选出来

        function Student(id, name, html, css, js) {
            this.id = id,
                this.name = name,
                this.html = html,
                this.css = css,
                this.js = js
        }

        let s1 = new Student(1, 'A', 80, 92, 73)
        let s2 = new Student(2, 'B', 100, 20, 85)
        let s3 = new Student(3, 'C', 60, 59, 70)
        let s4 = new Student(4, 'D', 88, 69, 75)
        let s5 = new Student(5, 'E', 91, 52, 77)
        
        let setA = new Set()
        setA.add(s1).add(s2).add(s3).add(s4).add(s5)

        let t = [...setA].filter(function(item){
            if (item.css<60) {
                return item
            }
        })
        console.log(t);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值