ECMAScript 6

ECMAScript 6

1. 简介

我们之前学习的js 其实是 ecmascript 5.0 简称 es5

ECMAScript 6.0(以下简称 ES6)是 JavaScript 语言的下一代标准,已经在 2015 年 6 月正式发布了。它的目标,是使得 JavaScript 语言可以用来编写复杂的大型应用程序,成为企业级开发语言。

ES6 既是一个历史名词,也是一个泛指,含义是 5.1 版以后的 JavaScript 的下一代标准,涵盖了 ES2015、ES2016、ES2017 等等,而 ES2015 则是正式名称,特指该年发布的正式版本的语言标准。本书中提到 ES6 的地方,一般是指 ES2015 标准,但有时也是泛指“下一代 JavaScript 语言”。

2. 基本语法

ES标准中不包含 DOM 和 BOM的定义,只涵盖基本数据类型、关键字、语句、运算符、内建对象、内建函数等通用语法。

1)let声明变量 (常用)

var 声明的变量没有局部作用域
let 声明的变量  有局部作用域

var 可以声明多次
let 只能声明一次

var 会变量提升
let 不存在变量提升 
// var 声明的变量没有局部作用域
// let 声明的变量  有局部作用域
{
var a = 0
let b = 1
}
console.log(a)  // 0
console.log(b)  // ReferenceError: b is not defined
 
// var 可以声明多次
// let 只能声明一次
var m = 1
var m = 2
let n = 3
let n = 4
console.log(m)  // 2
console.log(n)  // Identifier 'n' has already been declared
 
// var 会变量提升
// let 不存在变量提升 
console.log(x)  //undefined
var x = "apple"
console.log(y)  //ReferenceError: y is not defined
let y = "banana"

2)const声明常量

// 1、声明之后不允许改变    
const PI = "3.1415926"
PI = 3  // TypeError: Assignment to constant variable.
 
// 2、一但声明必须初始化,否则会报错
const MY_AGE  // SyntaxError: Missing initializer in const declaration

3)解构赋值(常用)

解构赋值是对赋值运算符的扩展。
他是一种针对数组或者对象进行模式匹配,然后对其中的变量进行赋值。
在代码书写上简洁且易读,语义更加清晰明了;也方便了复杂对象中数据字段获取。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>解构赋值</title>

    <script>

        // let arr = ["a","b","c"];
        //把数组中的所有元素分别赋值给不同的变量
        //之前的写法
        // let a = arr[0];
        // let b = arr[1];
        // let c = arr[2];
        
        //使用es6 数组解构
        // let [a,b,c] = arr;
        // console.log(a,b,c);

        let person = {"name":"张四","age":10,"gender":"男"};
        //之前的写法
        // let name = person.name;
        // let age = person.age;
        // let gender = person.gender;
        let {name,age,gender} = person;  // 要求:  变量名需要和对象的属性一致
        console.log(name,age,gender);
    </script>
</head>
<body>
    
</body>
</html>

4)模板字符串(常用)

模板字符串相当于加强版的字符串,用反引号 `,除了作为普通字符串,还可以用来定义多行字符串,还可以在字符串中加入变量和表达式。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>模板字符串</title>

    <script>
            // let name = '张小包';
            // let age = 20;
            // let gender = "男";

            // //以前的写法
            // console.log("我的名字叫"+name+",今天"+age+"岁,我是"+gender+"生");

            // //es6 模板字符串 反引号 `
            // console.log(`我的名字叫${name},今天${age}岁,我是${gender}生`);


            // let str = "今天星期四,"+
            // "明天就是星期五了,然后"+
            // "又要周考了";


            let str = `今天星期四,
            明天星期五,
            后天星期六,没有作业,贼爽`;

            console.log(str);

            
    </script>
</head>
<body>
    
</body>
</html>

5)声明对象简写(常用)

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>声明对象</title>


    <script>

        //声明对象
        let name = '小宝';
        let age = 1;

        //let person = {"name":name,"age":age};
        let person = {name,age};  //以变量名作为对象的属性名
        
        console.log(person);
    </script>
</head>
<body>
    
</body>
</html>

6)定义方法简写(常用)

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>声明方法</title>

    <script>
        
        // let name = "外面的";
        // let age = 100;
        // let person = {
        //                 "name":"张三",
        //                 "age":20,
        //                 show:function(){
        //                     //打印当前对象的name 和 age
        //                     console.log(this.name,this.age);
        //                     console.log(name,age);
        //                 }
        //             };

        // person.show();



        let person  = {
                "name":"张三",
                "age": 10,
                show(){
                    console.log(this.name,this.age);
                }
        }
            
        person.show();
    </script>
</head>
<body>
    
</body>
</html>

7)对象拓展运算符(常用)

拓展运算符(...)用于取出参数对象所有可遍历属性然后拷贝到当前对象。

// 1、拷贝对象
let person1 = {name: "Amy", age: 15}
let someone = { ...person1 }
console.log(someone)  //{name: "Amy", age: 15}
 
// 2、合并对象
let age = {age: 15}
let name = {name: "Amy"}
let person2 = {...age, ...name}
console.log(person2)  //{age: 15, name: "Amy"}

8)函数的默认参数

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>默认参数</title>

    <script>

        function show(a,b=18){
            console.log(a,b);
        }

        //show(1,2);           1 2
        //show(1);             1 18
        //show(1,"");           1 
        //show(1,null);         1 null
        //show(1,undefined);   1 18
    </script>
</head>
<body>
    
</body>
</html>

9)不定参数(常用)

不定参数用来表示不确定参数个数,形如,...变量名,由...加上一个具名参数标识符组成。具名参数只能放在参数列表的最后,并且有且只有一个不定参数。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>不定参数</title>

    <script>
        function show(...a){
            console.log(a);
        }

        //调用方法
        show();
        show("张三");
        show("张三","李四");
        show("张三","李四",123);
    </script>
</head>
<body>
    
</body>
</html>

10)箭头函数(慢慢习惯)

箭头函数提供了一种更加简洁的函数书写方式。基本语法是:参数 => 函数体

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>箭头函数</title>

    <script>

        // function show(){

        // }

        // let show = function(){
        //     console.log("展示数据");
        // }

        // let fun1 = function(a){
        //     return a;
        // }

        // let fun1 = (a)=>a;

        // console.log(fun1(10));

        // let fun2 = function(a){
        //     return a+101;
        // }

        // let fun2 =(a)=> a+101;

        // console.log(fun2(1));


        // let fun3 = function(a,b){
        //     return a+b;
        // }

        // let fun3 = (a,b)=> a+b;
        // console.log(fun3(10,20));

        // let fun4 = function (){
        //     let a = 20;
        //     console.log(a);
        // }

        // let fun4 = ()=>{
        //     let a = 20;
        //     console.log(a);
        // };

        // fun4();

        //定时器
        // setInterval(function(){
        //     console.log(new Date().toLocaleString());
        // },1000);

        setInterval(() => {
            console.log(new Date().toLocaleString());
        }, 1000);
    </script>
</head>
<body>
    
</body>
</html>
原文地址:https://www.cnblogs.com/conglingkaishi/p/15315226.html