ES6语法

ES6语法

1. 变量的声明和赋值

1.1 变量声明let和const

let和const是新增的声明变量的开头的关键字,在这之前,变量声明是用var关键字,这两个关键字和var的区别是,它们声明的变量没有预解析,let和const的区别是,let声明的是一般变量,const申明的常量,不可修改。

<script>
    // alert(iNum01);  // undefined

    // 声明变量
    var iNum01 = 12;

    // 通过let声明变量,声明的变量没有预解析,即不能在它的前面调用这个变量
    let iNum02 = 24;  
    iNum02 = 25;
    // alert(iNum02);

    // 通过const声明变量,声明的变量没有预解析,并且不能够修改
    const iNum03 = 26;
    // iNum03 = 25;   // 修改这个变量会报错
    alert(iNum03);  

</script>

1.2 扩展运算符(…)

扩展运算符(…),它用于把一个数组转化为用逗号分隔的参数序列,它常用在不定参数个数时的函数调用,数组合并等情形。

<script>
    var aList01 = [1, 2, 3];
    // var aList02 = aList01;   // 这是一个引用的关系,aList02是aList01的引用
    var aList02 = [...aList01];  // 如果不用扩展运算符,那么只能使用for循环往空数组里放数据完成拷贝

    aList01.push(4);
    // alert(aList01);
    // alert(aList02);

    function fnAdd(a, b, c){
        var rs = a + b + c;
        alert(rs);
    }
    // fnAdd(1, 2, 3);
    // fnAdd(aList02);   // 这样不行
    fnAdd(...aList02);

</script>

1.3 解构赋值

ES6 允许我们按照一定模式,从数组和对象中提取值,对变量进行赋值,这被称为解构(Destructuring)

1、数组的解构赋值

const arr = [1, 2, 3] 
let [a, b, c] = arr 
console.log(a, b, c); // 1 2 3

2、对象的解构赋值

const obj = { name: 'tom',address:'beijing', age: '100'} 
let {name, age} = obj  // 变量名称必须和对象的key同名
console.log(name, age); //tom 100

注意:数组的解构赋值用的是[],对象的解析赋值用的是{}

2. 函数相关

箭头函数

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script>
        /*
        function fnAdd(a, b){
            var rs = a+b;
            return rs;
        }
        */

        // 通过匿名函数赋值的形式来定义
        /*
        let fnAdd = function(a, b){
            let rs = a+b;
            return rs;
        };
        */
        // 将匿名函数改成箭头
        let fnAdd = (a, b)=>{
            let rs = a+b;
            return rs;
        };

        // alert(fnAdd(1, 2));

        /*
        let fnMyalert = function(a){
            alert(a);
        }
        */
        let fnMyalert = a=>{
            alert(a);
        };
        // fnMyalert('hello');

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

        let fnAdd2 = (a, b)=>a+b;
        // alert(fnAdd2(1, 2));

        /*
        let fnObj = function(a, b){
            return {'iNum01':a, 'iNum02':b};
        };
        */

        // 返回一个对象要多在返回值外面加一个小括号
        let fnObj = (a, b)=>({'iNum01':a, 'iNum02':b});

        // console.log(fnObj(10, 5));

        var oPerson = {
            name:'alin',
            age:18,
            showname:function(){
                /*
                setTimeout(function(){
                    alert('我的名字是: '+ this.name);   // this指向错乱,指向的是setTimeout中的对象window
                }, 2000);
                */
                setTimeout(()=>{
                    alert('我的名字是: '+ this.name);   // this指向错乱,指向的是setTimeout中的对象window
                }, 2000);
            }
        };
        oPerson.showname();

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

3. 模块及面向对象

3.1 模块导入import和导出export

javascript之前是没有模块的功能的,之前做js模块化开发,是用的一些js库来模拟实现的,在ES6中加入了模块的功能,一个js文件就是一个模块,js文件中需要先导出(export)后,才能被其他js文件导入(import)

  1. 首先要在服务器环境下
  2. script标签下加上type="module"
<script type="module">
    // 导入模块里面的变量和函数
    import {iNum01, fnAdd} from './js/mod01.js';

    // 使用默认导入方式导入模块里面的对象
    import oAlin from './js/mod01.js';

    // 使用模块里面的变量和函数
    alert(iNum01);
    fnAdd(10, 5);

    // 使用模块里面的对象
    alert(oAlin.name);
</script>

js/mod01.js

let iNum01 = 12;
let fnAdd = (a, b)=>{
    alert(a + b);
};
let oPerson = {"name":"alin", "age":18};
export {iNum01, fnAdd};
export default oPerson;

3.2 对象的简写

<script>
    let name = 'alin';
	let age = 21;

	/*
    var oPerson = {
        name:name,
        age:age,
        showname:function(){
            alert("我的名字是:"+this.name);
        },
        showage:function(){
            alert("我的年龄是:"+this.age);
        }
    };
    */

    var oPerson = {
        name,
        age,
        showname(){
            alert("我的名字是:"+this.name);
        },
        showage(){
            alert("我的年龄是:"+this.age);
        }
    };

    alert(oPerson.name);
    oPerson.showage();

</script>

3.3 类的定义与类的继承

<script>
    // 定义一个类
    class Person{
        // 定义构造函数,初始化属性
        constructor(name, age){
            this.name = name;
            this.age = age;
        }

        // 定义方法
        showname(){
            alert('我的名字是:'+this.name);
        }
        showage(){
            alert('我的年龄是:'+this.age);
        }
    }
    let oPer = new Person('alin', 21);
    oPer.showname();
    oPer.showage();

    class Student extends Person{
        constructor(name, age, school){
            super(name, age);
            this.school = school;
        }

        // 定义方法
        showname(){
            alert('重写后的 我的名字是:'+this.name);
        }
        showschool(){
            alert('我的学校是:'+this.school);
        }
    }
    let oStu = new Student('alin', 21, 'tyut');
    oStu.showname();
    oStu.showage();
    oStu.showschool();

</script>

4. 异步请求数据

当使用两个ajax请求时,因为是异步的所以不知道哪个先结束哪个后结束,所以需要两个ajax配合使用。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script src="js/jquery-1.12.4.min.js"></script>
    <script>

        // ajax嵌套的写法来合并不同ajax请求得到的数据
        $.ajax({
            url:'js/data01.json',
            type:'get',
            dataType:'json'
            /*
            success:function(dat){
                alert(dat.name);
            },
            error:function(){
                alert('服务器超时!');
            }
            */
        }).done(function(dat){
            $.ajax({
                url:'js/data02.json',
                type:'get',
                dataType:'json'
            }).done(function(dat2){
                alert(dat.name+' | '+dat2.name);
            }).fail(function(){
                alert('服务器超时!');
            });
        }).fail(function(){
            alert('服务器超时!');
        });

        // 使用promise对象
        // 实例化一个promise对象
        var pro01 = new Promise(function(resolve, reject){
            $.ajax({
                url:'js/data01.json',
                type:'get',
                dataType:'json'
            }).done(function(dat){
                resolve(dat);
            }).fail(function(err){
                reject(err);
            });
        });

        var pro02 = new Promise(function(resolve, reject){
            $.ajax({
                url:'js/data02.json',
                type:'get',
                dataType:'json'
            }).done(function(dat2){
                resolve(dat2);
            }).fail(function(err){
                reject(err);
            });
        });

        /*
        // 使用单个promise对象
        pro01.then(function(dat){
            alert(dat.name);
        }).catch(function(){
            alert('服务器超时!');
        });
        */

        // 使用多个promise对象
        Promise.all([pro01, pro02]).then(function(dat){
            // console.log(dat);
            alert(dat[0].age+' | '+dat[1].age);
        }).catch(function(){
            alert('服务器超时!');
        });

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

5. 数组操作方法

数组新增map方法,用来遍历数组

<script>
    var aList = ['a', 'b', 'c', 'd'];

    // 使用数组的map方法来循环数组, 第一个参数是数组的成员值,第二个参数是成员的索引值
    aList.map(function(item, index){
        alert('第'+(index+1)+'个成员是:'+item);
    });

</script>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值