ES6新特性

目录

let 声明变量

const声明常量

 解构赋值

模板字符串

对象的简化写法

箭头函数

函数参数的默认值设置

rest参数

扩展运算符

symbol

创建使用

Symbol.hasInstance

Symbol.isConcatSpreadable

迭代器 iterator

工作原理

自定义遍历数据

生成器 generator

创建和使用

参数的传递

案例

promise

基本使用

then方法

catch

set

map

class

数值扩展

对象扩展方法

模块化

ES6模块化语法

es7新特性 

async await

es8对象扩展方法

es9扩展运算符&&rest参数对对象的操作

es10对象扩展方法fromEntries

es10字符串扩展方法

es10数组扩展方法

description获取Symbol字符串

Promise.公有方法

可选链操作符

   BigInt大整数

globalThis绝对全局对象


let 声明变量

不能重复声明,块级作用域(if else for while) ,不存在变量提升,不影响作用域链

  //不能重复声明,
    // let start = 1
    // let start = 2

    // 块级作用域
    // {
    //     let age = 18
    // }
    // console.log(age);

    // 不存在变量提升
    // console.log(a);
    // let a = 1

    // 不影响作用域链
    // {
    //     let age = 18
    //     function fn() {
    //         console.log(age);
    //     }
    //     fn()
    // }

const声明常量

必须有初始值,常量的值不能修改,块级作用域,操作空间地址不算重新赋值


    // 必须有初始值
    // const age = 18

    // 常量的值不能修改
    // age = 8

    // 块级作用域
    // {
    //     const age = 18
    // }
    // console.log(age);

    // 操作空间地址不算重新赋值
    // const arr = [1, 2, 3]
    // arr.push(4)

 解构赋值

允许按照一定格式从数组和对象中提取值,对变量进行赋值

    // 数组的解构
    // let f4 = ['小沈阳', '刘能', '赵四', '宋小宝']
    // let [x, l, z, s] = f4
    // console.log(x, l, z, s);

    // 对象解构
    // let zhao = {
    //     name: '赵本山',
    //     age: '60',
    //     xiaopin: function () {
    //         console.log('我可以演小品');
    //     }
    // }
    // let { xiaopin } = zhao
    // xiaopin()

模板字符串

可以识别换行符,拼接变量

    let age = 18
    let str = `我今年${age}了`
    console.log(str);

对象的简化写法

kv 一致省略v 函数可以不写function

    let age = 18
    let name = 'jyc'
    let obj = {
        name,
        age,
        fn() {
            console.log(obj.age);
        }
    }
    obj.fn()

箭头函数

  •     没有自己的this,this指向函数声明时所在作用域下this的值
  •     不能作为构造函数
  •     不能使用arguments
  •     形参就一个值可以省略小括号,执行语句就一个值可以省略花括号和return
    // var age = 18
    // let obj = {
    //     age: 22
    // }
    // function getAge() {
    //     console.log(this.age);
    // }
    // let getAge1 = () => {
    //     console.log(this.age);
    // }
    // getAge()
    // getAge1()
    // getAge.call(obj)
    // getAge1.call(obj)


    // let fn = a => a + a
    // console.log(fn(1));

函数参数的默认值设置

允许函数参数赋初始值

   function add(a, b, c = 10) {
        return a + b + c
    }
    // console.log(add(1, 2));


    //与解构赋值结合
    function reqire({ host, userName, password, port = 8080 }) {
        console.log(host);
        console.log(userName);
        console.log(password);
        console.log(port);
    }
    reqire({
        host: ' 172.168.0.0.1',
        userName: 'root',
        password: 'root',

    })

rest参数

用于获取函数实参代替arguments


    // arguments es5伪数组
    // function data() {
    //     console.log(arguments);
    // }


    // rest参数必须要放到最后得到数组
    function data(a, b, ...args) {
        console.log(args);
    }
    data('小白', '小明', '小李', 1, 2, 3)//(4) ['小李', 1, 2, 3]

扩展运算符

合并 浅克隆 伪数组转数组

    //合并
    let a = [1, 2, 3]
    let b = [4, 5, 6]
    let arr = [...a, ...b]
    console.log(arr);

    //浅克隆
    let arr2 = [...arr]
    console.log(arr2);

    // 伪数组转数组
    function fn() {
        console.log([...arguments]);
    }
    fn('小白', '小明', '小李')

symbol

es6引入了一种新的原始值类型symbol,表示独一无二的值,

symbol是唯一的,用来解决命名冲突的问题,不能参与运算,不能使用for in 使用refice,ownkeys

主要用于给对象添加属性和方法

创建使用

    let game = {
        name: '俄罗斯方块',
        up: () => { },
        down: () => { }
    }
    let methods = {
        up: Symbol(),
        down: Symbol(),
    }
    game[methods.up] = function () {
        console.log('我可以改变形状');
    }
    game[methods.down] = function () {
        console.log('我可以下降');
    }
    console.log(game);

Symbol.hasInstance

当其对象用 instanceof,判断是否为该对象的实例时会调用这个方法

    class Person {
        static [Symbol.hasInstance]() {
            console.log('我被用来检测类型');
            return true
        }
    }
    let o = {}
    console.log(o instanceof Person); //true

Symbol.isConcatSpreadable

等于的是一个布尔值,表示Array.prototype.content()时是否可以展开

    let arr1 = [1, 2, 3]
    let arr2 = [4, 5, 6]
    arr1[Symbol.isConcatSpreadable] = false
    let arr = arr1.concat(arr2)
    console.log(arr);//(4) [Array(3), 4, 5, 6]

迭代器 iterator

迭代器是一种接口 ,为各种不同的数据结构,提供统一的访问机制,任何数据结构只要部署了iterator接口就可以完成遍历操作

es6创造了一种新的遍历命令 for...of..  iterator接口主要提供 for...of..消费

具备iterator接口的数据 array ,arguments,set map string typeArray NodeList

工作原理

  • 创建一个指针对象,指向当前数据结构的起始位置,
  • 第一次调用对象的.next方法,指针自动指向数据结构的第一个成员
  • 接下来不断调用.next方法,指针一直往后移动,直到指向最后一个成员
  • 每次调用next方法,返回一个包含value和done属性的对象
    let arr = [10, 20, 30]

    let iterator = arr[Symbol.iterator]()//一个函数 得到一个对象 
    console.log(iterator);//得到一个对象 ,有一个next方法(指针)
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

前端 贾公子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值