ES6-ES11新特性学习

1、let关键字

let关键字用来声明变量,使用let声明的变量有几个特点:

  • 不允许重复声明
  • 块级作用域
  • 不存在变量提升
  • 不影响作用域链
应用场景:以后声明变量使用let就对了

2、const 关键字

const 关键字用来声明常量,const声明有一下特点

  • 声明必须赋初始值
  • 标识符一般为大写
  • 不允许重复声明
  • 值不允许修改
注意:对象属性修改和数组元素变化不会触发const错误
应用场景:声明对象类型使用const, 非对象类型声明选择let

3、变量的解构赋值

​ ES6允许按照一定模式,从数组和对象中提取值,对变量进行赋值,这杯称为解构赋值。

//数组的解构赋值
const arr = ['张学友', '刘德华', '李敏', '郭富城'];
let [zhang, liu, li, guo] = arr;
//对象的解构赋值
const obj = {
    name: '山里的闲人',
    tags: ['野人', '美女', '程序员']
}
let {name, tags} = obj
//复杂结构

4、模板字符串

  • 模板字符串是增强版的字符串,用反引号(`)标识,特点:
  • 字符串中可以出现换行符
  • 可以使用${×××}形式输出变量

5、简化对象写法

​ ES6 允许在大括号里面,直接写入变量和函数,作为对象的属性和方法。这样的书写更加简洁。

注意:对象简写形式简化了代码,所以以后用简写就对了

6、箭头函数

​ ES6 允许使用「箭头」(=>)定义函数。

箭头函数的注意点:

  • 如果形参只有一个,则小括号可以省略
  • 函数体如果只有一条语句,则花括号可以省略,函数的返回值为该条语句的执行结果
  • 箭头函数 this 指向声明时所在作用域下 this 的值
  • 箭头函数不能作为构造函数实例化
  • 不能使用 arguments
注意:箭头函数不会更改 this 指向,用来指定回调函数会非常合适

7、rest参数

//ES6引入rest参数,用于获取函数的实参,用来代替arguments
//es5获取实参的方式
function fn(){
    console.log(arguments)
}
fn('萧山','劳拉', '密密')
//rest参数
function fn(...args){
    console.log(args)
}
fn(1,2,3,4,5)
//rest参数必须放在最后面
function fn(a,b,...args){
    console.log(a)
    console.log(b)
    console.log(args)
}

8、spread 扩展运算符

​ 扩展运算符(spread)也是三个点(…)。它好比 rest 参数的逆运算,将一个数组转为用逗号分隔的参数序列,对数组进行解包

9、Symbol 基本使用

​ ES6 引入了一种新的原始数据类型 Symbol, 表示独一无二的值。它是JavaScript 语言的第七种数据类型,是一种类似于字符串的数据类型。

Symbol 特点:

  • Symbol 的值是唯一的,用来解决命名冲突的问题
  • Symbol 值不能与其他数据进行运算
  • Symbol 定义的对象属性不能使用 for…in 循环遍历, 但是可以使用Reflect.ownKeys 来获取对象的所有键名
  • 箭头函数不能作为构造函数实例化
  • 不能使用 arguments
注意:遇到唯一性场景时可以使用Symbol

Symbol 内置值:

Symbol.hasInstance当其他对象使用instanceof运算符,判断是否为该对象的实例时,会调用这个方法
Symbol.isConcatSpreadable对象的Symbol.isConcatSpreadable属性等于的是一个布尔值,表示该对象用于Array.prototype.concat()时,是否可以展开
Symbol.unscopables该对象指定了使用with关键字时,哪些属性会被with环境排除
Symbol.match当执行str.match(myObject)时,如果该属性存在,会调用它,返回该方法的返回值
Symbol.replace当该对象被str.replace方法调用时,会返回该方法的返回值
Symbol.search当该对象被str.search方法调用时,会返回该方法的返回值
Symbol.split当该对象被str.split方法调用时,会返回该方法的返回值
Symbol.iterator对象进行for...of循环时,回调用Symbol.iterator方法,返回该对象的默认遍历器
Symbol.toPrimitive该对象被转为原始类型的值时,会调用这个方法,返回该对象的原始类型
Symbol.toStringTag在该对象上面调用toSting方法时,返回该方法的返回值
Symbol.species创建衍生对象时,会使用该属性

10、迭代器

​ 遍历器(Iterator)就是一种机制。它是一种接口,为各种不同的数据结构提供统一的访问机制。任何数据结构只要部署 Iterator 接口,就可以完成遍历操作。

  • ES6 创造了一种新的遍历命令 for...of 循环,Iterator 接口主要供 for...of 消费
  • 原生具备 iterator 接口的数据(可用 for of 遍历)
    • Array
    • Arguments
    • Set
    • Map
    • String
    • TypedArray
    • NodeList
  • 工作原理
    • 创建一个指针对象,指向当前数据结构的起始位置
    • 第一次调用对象的 next 方法,指针自动指向数据结构的第一个成员
    • 接下来不断调用 next 方法,指针一直往后移动,直到指向最后一个成员
    • 每调用 next 方法返回一个包含 value 和done 属性的对象
注意:需要自定义遍历数据的时候,要想到迭代器。

迭代器的应用__自定义遍历数据

<script>
    const banji = {
        name: "终极一班",
        stus: [
            'xiaoming',
            'xiaohang',
            'laoda',
            'xiejia'
        ],
        [Symbol.iterator]() {
            let index = 0;
            return {
                next: function(){
                    if(index<this.stus.length){
                        const result ={value : _this.stus[i],done:false};
                        index++;
                        return result;
                    }else{
                        return {value : undefined, done:true}
                    }
                }
            }
        }
    }
    for(let v of banji){
        console.log(v)
    }
</script>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值