ES6

ES6快速入门


第一章 快速入门


1.1简介


ECMAScript6(简称ES6)是于2015年6月正式发布的JavaScript语言的标准,正式名为ECMAScript 2015(ES2015)。它的目标是使得JavaScript语言可以用来编写复杂的大型应用程序,成为企业级开发语言。

另外,一些情况下ES6也泛指ES2015及之后的新增特性,虽然之后的版本应当称为ES7、ES8等。


1.2ES6新特性-let&const


<!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>Document</title>
</head>

<body>
    <script>
        var a = 1;
        console.info(a);

        //ES6常量  不能修改
        const b = 2;
        console.info(b);

        //使用var声明变量往往会越域
        //let声明的变量有严格的局部作用域,let同一个变量名只能声明一次
        {
            var a = 1;
            let c = 3;
        }
        console.info(a); //1
        console.info(c); //报错

        //var会变量提升,let不会变量提升
        //var可以先使用,后声明。let不可以
        console.log(a)
        var a = 1;
        console.log(b)
        let b = 2;
    </script>
</body>

</html>

1.3ES6新特性-结构&字符串


<!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>Document</title>
</head>

<body>

    <script>
        //数组的解构
        let arr = [1, 2, 3];
        let a = arr[0];
        let b = arr[1];
        let c = arr[2];
        console.info(a, b, c) //1 2 3

        //ES6:数组解构表达式
        let [aa, bb, cc] = arr;
        console.info(aa, bb, cc) //1 2 3
    </script>

    <script>
        //对象
        let persion = {
            name: 'Jack',
            age: 21,
            hobbies: ['唱歌', '跳舞']
        }

        let name = persion.name;
        console.info(name);

        //ES6:对象解构表达式
        let [name, age, hobbies] = persion;
        console.info(name, age, hobbies);
    </script>

    <script>
        //ES6:字符串模板
        let html = "<div>" +
            "<a>你好</a>" +
            "</div>";

        let esHtml = `<div>
            <a>你好</a>
            </div>`;

        console.info(esHtml);
    </script>

    <script>
        //ES6:字符串内置函数
        let str = "hello.vue"
        console.log(str.startsWith("hello")) //true 以...开头
        console.log(str.endsWith(".vue")) //true 以...结尾
        console.log(str.includes("e")) //true 包含...
    </script>

    <script>
        //对象
        let persion = {
            name: 'Jack',
            age: 21,
            hobbies: ['唱歌', '跳舞']
        }

        function fun() {
            return "这是一个函数"
        }

        //ES6:对象解构表达式
        let [name, age, hobbies] = persion;
        //ES6:字符串插入变量和表达式,变量名写在${},${}中可以放入js表达式
        console.info(`名字是:${name},年龄:${age},爱好:${hobbies},${fun()}`)
    </script>

</body>

</html>

1.4ES6新特性-函数优化


<!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>Document</title>
</head>

<body>

    <script>
        //1.函数的参数默认值  ES6之前:
        function add(a) {
            if (!a) {
                a = 1;
            }
            console.info(a);
        }
        add();

        //2.函数的参数默认值  ES6:
        function add(a = 1) {
            console.info(a);
        }
        add(); //1
        add(2); //2

        //二、可变长度参数
        //ES6之前:
        function add1(a) {
            console.info(a);
        }
        add([1, 2]);
        //ES6:
        function add2(...a) {
            console.info(a);
        }
        add(1, 2, 3);
    </script>

    <script>
        //ES6:参数解构
        let nums = {
            a: 1,
            b: 2
        }

        function add({
            a,
            b
        }) {
            console.info(a + b);
        }

        add(nums);
        //箭头函数  lambda  =>

        function add(a, b) {
            return a + b;
        }

        console.info(add(1, 2));

        //ES6:
        let add = (a, b) => a + b;
        console.info(add(1, 2))
    </script>

</body>

</html>

1.5ES6新特性-对象优化-merged


<!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>Document</title>
</head>

<body>

    <script>
        //1.对象的内置函数
        const person = {
            name: "jack",
            age: 21,
            language: ['java', 'js', 'css']
        }

        console.info(Object.keys(person)); //["name", "age", "language"]
        console.info(Object.values(person)); //["jack", 21, Array(3)]
        console.info(Object.entries(person)); //[Array(2), Array(2), Array(2)]

        //对象合并
        const target = {
            a: 1
        };
        const source1 = {
            b: 2
        };
        const source2 = {
            c: 3
        };

        //参数说明第一个参数是需要合并的对象―其他参数会合并到第一个参数上面
        //如果有重复的属性,会以后面的进行覆盖

        object.assign(target, source1, source2);
        console.log(target); //{a:1,b:2,C:3}
    </script>

    <script>
        let name = "jack";
        let age = 21;

        //ES6之前:
        let person = {
            name: name,
            age: age
        }

        //ES6:对象声明属性的简写:如果属性名和引用的变量名是相同的就可以省略赋值,它会自动调用相同名字的变量
        let person = {
            name,
            age
        }
        console.info(person)
    </script>

    <script>
        //ES6之前:
        let person = {
            name: "jack",
            eat: function(food) {
                console.info(this.name + "吃了:" + food)
            },
            //ES6:通过箭头函数声明,如果要调用本对象的属性this会失效,需要使用对象.属性
            eat2: (food) => console.info(person.name + "吃了:" + food),
            eat3(food) {
                console.info(this.name + "吃了:" + food)
            }
        }

        person.eat("米饭");
        person.eat2("馒头");
        person.eat3("水果");
    </script>

    <script>
        //对象的扩展运算符
        //拷贝对象
        let person = {
            name: "jack",
            age: 21,
            wife: {
                name: "tom"
            }
        }
        let person2 = {...person
        };
        console.info(person2)

        //合并对象
        const target = {
            a: 1
        };
        const source1 = {
            b: 2
        };
        const source2 = {
            c: 3
        };
        let newObject = {
            ...target,
            ...source1,
            ...source2
        };
        console.info(newObject)
    </script>

</body>

</html>

1.6ES6新特性-promise异步编排


<!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>Document</title>
</head>

<body>

    <script>
        // ES6: promise异步编排
        new Promise((resolve, reject) => {
                // 1,请求用户名是否存在
                $.ajax({
                    url: "http: / /localhost:8811/user/existUsername",
                    success: function(result) {
                        resolve(result);
                    },
                    error: function(err) {
                        reject(err);
                    }
                })
            })
            // 2.手机是否存在
            .then(result => {
                return new Promise((resolve, reject) => {
                    if (result.data) {
                        alert('用户名不存在!')
                        $.ajax({
                            url: "http://localhost:8811/user/existPhone",
                            success: function(result) {
                                resolve(result);
                            },
                            error: function(err) {
                                reject(err);
                            }
                        })
                    } else {
                        alert(result.message)
                    }
                })

            })
            .then(result => {
                return new Promise((resolve, reject) => {
                    if (result.data) {
                        alert('手机不存在!') //注册用户
                        $.ajax({
                            url: "http:/ /localhost:8811/user/registryUser",
                            success: function(result) {
                                resolve(result);
                            },
                            error: function(err) {
                                reject(err);
                            }
                        })
                    } else {
                        //手机号已存在
                        alert(result.message)
                    }
                })
            })
            .then(result => {
                if (result.data) {
                    alert(result.message)
                }
            })
            .catch(err => {
                alert('服务器异常')
            })
    </script>

</body>

</html>

1.7ES6新特性-模块化


<!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>Document</title>
</head>

<body>

    <script type="module">
        /*import语法 import 组件名from js文件路径 组件名∶{需要导入的组件}多个用逗号分隔,用过组件有很多可以写成*,就不需要,但是还需要使用as取别名*/ 
        import { User } from './user.js'; console.info(User); 
        //非默认组件一定要用大括号,默认组件不能写在大括号里面
    </script>

</body>

</html>
export let User = {
    usermame: "jack",
    age: "21",
    print() {
        console.info(`姓名:${this.usermame},年龄:${this.age}`)
    }
}

let gril = {
    realName: "tom",
    cup: "E"
}

//需要导入,先导出
//1.直接写在组件上面(变量、对象、函数....) export let User
//2.写在底部(批量导出) export {User, girl}

//3.导出默认组件