Skip to content

ES6


一、概述


ECMAScript 6,简称 ES6 ,是 JavaScript 语言的一次重大更新。它于 2015 年发布,

是原来的 ECMAScript 标准的第六个版本。ES6 带来了大量的新特性,

包括 箭头函数、模板字符串、let 和 const 关键字、解构、默认参数值、模块系统 等等,

大大提升了 JavaScript 的开发体验。

ES6 对 JavaScript 的改进在以下几个方面:

  • 更加简洁:ES6 引入了一些新的语法,如箭头函数、类和模板字符串等,使代码更加简洁易懂。

  • 更强大的功能:ES6 引入了一些新的 API、解构语法和迭代器等功能,从而使得 JavaScript 更加强大。

  • 更好的适用性:ES6 引入的模块化功能为 JavaScript 代码的组织和管理提供了更好的方式,不仅提高了程

    序的可维护性,还让 JavaScript 更方便地应用于大型的应用程序。


历史版本:

标准版本发布时间新特性
ES11997年第一版 ECMAScript
ES21998年引入 setter 和 getter 函数,增加了 try/catch,switch 语句允许字符串
ES31999年引入了正则表达式和更好的字符串处理
ES4取消取消,部分特性被ES3.1和ES5继承
ES52009年Object.defineProperty,JSON,严格模式,数组新增方法等
ES5.12011年对ES5做了一些勘误和例行修订
ES62015年箭头函数、模板字符串、解构、let和const关键字、类、模块系统等
ES20162016年数组.includes,指数操作符(**),Array.prototype.fill 等
ES20172017年异步函数 async/await,Object.values/Object.entries,字符串填充
ES20182018年正则表达式命名捕获组,几个有用的对象方法,异步迭代器等
ES20192019年Array.prototype.{flat,flatMap},Object.fromEntries等
ES20202020年BigInt、动态导入、可选链操作符、空位合并操作符
ES20212021年String.prototype.replaceAll,逻辑赋值运算符,Promise.any等
... ...

二、关于 let & const


ES6 新增了 letconst,用来声明变量 , 使用的细节上也存在诸多差异


  • letvar 的差别

    1、let 不能重复声明

    2、let 有块级作用域,非函数的花括号遇见let会有块级作用域,也就是只能在花括号里面访问。

    3、let 不会预解析进行变量提升

    4、let 定义的全局变量不会作为 window 的属性

    5、let 在 es6 中推荐优先使用


html
<script>        

    //1. let只有在当前代码块有效代码块. 代码块、函数、全局
    {
        let a = 1
        var b = 2
        }   
    // console.log(a);  // ReferenceError: a is not defined   花括号外面无法访问
    console.log(b);  // 可以正常输出
    
    //2. 不能重复声明
    // let name = '天真'
    // let name = '无邪'
    //SyntaxError: Identifier 'name' has already been declared
	
    //3. let 不存在变量提升(先声明,在使用)
    console.log(test) //可以     但是值为undefined
    var test = 'test'

    //console.log(test1) //不可以  let命令改变了语法行为,它所声明的变量一定要在声明后使用,否则报错。
    // let test1 = 'test1' 
    //ReferenceError: Cannot access 'test1' before initialization
    
    //4、let不会成为window的属性   
    var a = 100
    console.log(window.a) //100

    let b1 = 200
    console.log(window.b1) //undefined
    
    //5. 循环中推荐使用
    for (let i = 0; i < 10; i++) {
        // ...
    }
    // console.log(i);  //循环外不能访问
    // ReferenceError: i is not defined

</script>

  • constvar 的差异

    1、新增 const 和 let 类似,只是 const 定义的变量不能修改

    2、关键理解在意 const 在栈内存的那个对应的值不能变

    • 如果是普通类型的变量,那么值就是实际的值
    • 但如果是一个引用类型的变量,栈内存的值是地址值,实际内容在堆内存里
    • 普通的就对应于值不能修改,引用类型的比如数组内增删,这并没有修改地址,这是允许的

html
<script>
    //声明场景语法,建议变量名大写区分
    const PI = 3.1415926;

    //1.常量声明必须有初始化值
    //const A ; //报错

    //2.常量值不可以改动
    //const A  = 'irai'
    //A  = 'xx' //不可改动

    //3.和let一样,块级作用域
    {
        const A = 'irai'
        console.log(A);
    }
    //console.log(A); //报错,访问不到

    //4.对应数组和对象元素修改,不算常量修改,修改值,不修改地址
    const TEAM = ['刘德华','张学友','郭富城'];
    TEAM.push('黎明');
    //TEAM=[] // 报错(这相当于新new了一个数组,然后变成了新的地址值)
    console.log(TEAM)
    
</script>

三、模板字符串


模板字符串(template string)是增强版的字符串,用 反引号(`)标识


  1. 字符串中可以出现换行符

  2. 可以使用 ${xxx} 形式输出变量和拼接变量


html
<script>
    // 1 多行普通字符串(太麻烦~~)
    let ulStr =
        '<ul>'+
        '<li>JAVA</li>'+
        '<li>html</li>'+
        '<li>VUE</li>'+
        '</ul>'
    console.log(ulStr)   
    
    // 2 多行模板字符串
    let ulStr2 = `
        <ul>
        	<li>JAVA</li>
        	<li>html</li>
        	<li>VUE</li>
        </ul>`
    console.log(ulStr2)  
    
    // 3  普通字符串拼接
    let name ='张小明'
    let infoStr =name+'被评为本年级优秀学员'  
    console.log(infoStr)
    
    // 4  模板字符串拼接
    let infoStr2 =`${name}被评为本年级优秀学员`
    console.log(infoStr2) //张小明被评为本年级优秀学员
    
</script>

四、解构表达式