• ES6


    ES6

    浏览器

    • chrome 49 ~ 65
    • fixfox 52 ~ 60
    • IE 11

    类的引入

    class Friut {
        constructor(type,color){
            this.type = type
            this.color = color
        }
        // toString 是原型对象上的属性
        toString(){
            console.log(this.type + 'is' + this.color)
        }
    }
    class Banana extends Friut {
        constructor(){
            // 子类必须要在constructor中指定super 函数,否则在新建实例的时候会报错
            super('banana','yellow')
        }
        toString(super.toString())
    }

    导出

    导出变量:
    export var domain = 'http://www.baidu.com'
    
    导出函数:
    export function myFun(){
        return 'hello'
    }

    箭头函数,解决this作用域的问题

    函数设置默认值

    // 有默认值
    function myFunction(width = 10, height = 30){
        let obj = {
             width,
            height: height,
        }
    }
    // 如果没有默认值可能会导致一些问题,如果传入的参数布尔值为false的话
    function myFunction(width,height){
        let obj = {
             width || 10,
            height: height || 50,
        }
    }
    myFunction(0,0) // obj: {  10, height: 50},不能正确的取传入的值

    延展操作符...

    [...'hello'] -> ['h','e','l','l','o']
    const arr = [1,2,3]
    const arr1 = [4,5,6]
    const arr3 = [...arr, ...arr1] //浅拷贝 [1,2,3,4,5,6]

    对象属性简写

    const name="zhangsan",age=18,gender="male"
    const params = {
        name: name,
        age: age,
        gender: gender
    }
    
    es6可以这样写:
    const params = { name, age, gender }
    
    结果:
    // { name: 'zahngsan', age: 18, gender: 'male' }

    Promise 异步编程

    setTimeOut(() => {
        console.log('hello') // 1s后输出hello
        setTimeOut(() => {
            console.log('world') // 2s后输出world
        },1000)
    },1000)
    
    // 使用Promise
    const wait = new Promise((resovle, reject) => {
        setTimeout(resolve,1000)  // 1s后执行then函数
    })
    wait.then(() => {
        console.log('hello') // 每一个任务
    }).then(() => {
        console.log('world')
    })

    ES7

    数组includes函数,判断数组中是否存在某个值,返回boolean 指数操作符**

    console.log(2**10) // 2^10 = 1024

    ES8

    async/await 以串行的方式运行异步操作

    Object.values(obj) 获取对象的所有值

    Onject.entries(obj)

    obj = {a:1,b:2,c:3}
    for(let [key,value] of obj.entries(obj)){
        console.log(`{key:${key},value:${value}}`)
    }
    
    // { key: a, value: 1}
    // { key: b, value: 2}
    // { key: c, value: 3}

    padStart(targetLength,padString)

    • targetLength: 被填充后的字符串目标长度,如果目标长度小于现在字符串的长度,则不作处理,返回原字符串
    • padString 备选填充字符串,填充后如果长度超出目标字符串,则只截取字符串左侧部分
        string = 0.0342
        string.padStart(8,['235'])
        
        // 目标长度为8,原字符串长度为6,添加23后达到8,所以结果为 230.0342
    

    padEnd(targetLength,[padString])

    • 参数解析同上
        string = '0.43'
        string.padEnd(5,'0') // 0.430
        string.padEnd(10,'60') // 0.43600000
    

    ES9

    异步迭代

    await在循环中场景中下面的代码不会正常运行
    async function getData(){
        for(let i = 0; i< 10; i++){
            await dosomething()
        }
    }
    
    async function getData(){
        arr.forEach(async(item) => {
            await dosomething(item)
        })
    }
    
    es9引入异步迭代后await和forEach同时使用
    
    async function getItem(array){
        await array.forEach(item => {
            setTimeout(() => {
                console.log(item)
            },1000)
        })
    }
    1s后依次输入123
    

    正则表达式命名捕获组

        匹配YYYY-MM-DD 格式的正则
        reg = /([0-9]{4})-([0-9]{2})-([0-9]{2})/
        
        es9:
        reg = /(?<year>[0-9]{4})-(?<month>[0-9]{2})-(?<day>[0-9]{2})/
        match = reg.exec('2019-01-10')
        match.groups.year // 2019
        match.groups.month // 01
        match.groups.day // 10
        
        在replace中的使用,时间转换为美国时间格式
        '2019-01-10'.replace(reg,'$<month>-$<day>-$<year>')
    

    ES10

    flat、flatMap

    • flat()
      1. 参数:不传默认为1,传入表示遍历的深度,Infinity传入表示展开任意深度的嵌套数组
      2. 例子:
        • [1,2,[3,4,[5]]].flat() --> [1,2,3,4,[5]]
        • [1,2,[3,4,[5]]].flat(2) --> [1,2,3,4,5]
        • [1,2, ,4].flat() --> 去除空项
    • flatMap
      1. 描述: 遍历数组将返回的数组压平一层
      2. 例子: [1,2,3].flatMap(i => [[i*2]]) --> [[1],[2],[3]]

    trimStart: 去除字符串首位空格 " sds d ".trimStart() --> "sds d "

    trimEnd: 去除字符串尾部的空格

    Object.fromEntries()

    • 将array转为对象
    const arr = [["name","张三"],["age",18],["class","九年级一班"]]
    const obj = Object.fromEntries(arr)
    结果:
    {
        name: "张三",
        age: 18,
        class: "九年级一班"
    }
    

    新的数据类型BigInt

    • 所以es10以后js的基本数据类型一共有7中,分别为:Number、Boolean、String、Null、Undefined、Symbol、BigInt
  • 相关阅读:
    curl命令
    sublime 光标选中多行
    mysql删除重复记录并且只保留一条
    Laravel 如何实现 Excel 导入及导出功能
    laravel中DB查询数据库后,返回的对象转为数组
    【文件上传/解析技巧拓展】————1、我的WafBypass之道(Upload篇)
    【文件包含技巧拓展】————5、文件包含漏洞(绕过姿势)
    【文件包含技巧拓展】————4、文件包含漏洞(下)
    【文件包含技巧拓展】————3、文件包含漏洞(上)
    【文件包含技巧拓展】————2、zip或phar协议包含文件
  • 原文地址:https://www.cnblogs.com/zhoujin-Jojo/p/15069794.html
Copyright © 2020-2023  润新知