前端ES6学习笔记

前端ES6语法

Let变量

1.let 与 var的区别

  • let声明的变量不会自动提升,var会自动提升

    //实例演示:
    //var
    //下面语法通过,输出a = undefined,相当于在console前面有 var a;
        console.log("a = ",a);
        var a = 3;
    ​
    //let 
    //语法报错
         console.log("a = ",a);
         let a = 3;
    ​

  • let 有严格的局部作用域

    //实例演示:
    {
        let a = 1;
        var b = 2;
    }
    //let  语法报错 a is not defined
    console.log(a);
    //var  输出2
    console.log(b)

  • let在作用域内只能声明一次,var可以声明多次

    {
        //实例演示:
        //let   语法不通过,声明了2次a
        let a = 10;
        let a = 20;
        console.log(a);
        
        
        //var  输出20
        var b = 10;
        var b = 20
        console.log(b)
    }

const常量

  • const 常量定义后不能改变值

  • const 常量在定义时必须赋值

数组解构

//实例演示:
{
            //传统写法:
            let arr = [1,2,3];
            let a=arr[0],b=arr[1],c=arr[2];
            console.log(a,b,c);
}
{
            //ES6:
            let arr = [1,2,3];
            let [a,b,c] = arr;
            console.log(a,b,c);
            //或者可以这样写
            let [num1,num2,num3] = [4,5,6];
            console.log(num1,num2,num3);
}

对象解构

实例:

{
            //传统写法:
            let student = {name:"zs",age:20};
            name = student.name;
            age = student.age;
            console.log(student.name,student.age);
}
{
            //ES6:
            let student = {name:"zs",age:20};
            let {name,age} = student;
            console.log(name,age);
}

模板字符串 ``

ES6新特性模板字符串``(反引号)用于引用变量,表达式计算,引用方法,使用时需要用${}

  • 1.模板字符串``引用变量

    let name = "zs";
    console.log(`name=${name}`)
  • 2.模板字符串``表达式计算

    let num1 = 20;
    let num2 = 30;
    console.log(`${num1}+${num2}=${num1+num2}`)
  • 3.模板字符串``引用方法

     function f1(name){
         return "name = " + name;
     }
    console.log(`喜欢的人:${f1("张三")}`)
  • 4.模板字符串``引用的内容,会保留换行

    //保留换行
    console.log(
        `每天都要
        快快
        乐乐
        学习`
    )
    ​

对象声明简写

        const age = 18;
        const name = "李华";
        {
            // 传统 声明/定义对象
            let student = {name: name, age: age};
            console.log("student=>", student);
        }
        {
            // ES6 声明/定义对象
            //1. {name, age} : 表示对象的属性名是 name 和 age
            //2. 属性 name 的值是从变量/常量 name 来的
            let student = {name, age};
            console.log("student=>", student);
        }

对象方法简写

可以省略function

{
// 传统对象方法定义
    let student = {
        name: "李华", 
        age: 18, 
        skill: function () {
            console.log("写代码");
        }
    }
    student.skill();
}
{
//  ES6 
    let student = {
        name: "李华", 
        age: 18, 
        skill() {
            console.log("写代码");
        }
    }
    student.skill();
}

对象运算符扩展(深拷贝与合并对象)

传统使用 let student2 = student1,是浅拷贝(引用),改变了student2的属性,也会改变student1的属性

如果想要对象不相互关联,需要使用深拷贝,语法是: let student2 = (...student1)

实例演示:

            let student1 = {name: "李华", age: 18};
            {
                //传统引用,两个学生对象输出的name都为小明
                let student2 = student1;
                student2.name = "小明";
                console.log("student1=>", student1);
                console.log("student2=>", student2);//
            }
            let studnet ={name: "李华", age: 18};
            {
                // 拷贝对象(深拷贝),只有第二个学生对象输出的是小明
                let student2 = {...studnet};
                student2.name = "小明";
                console.log("student1=>", studnet);
                console.log("student2=>", student2);
            }
            {
                // 合并对象[深拷贝],两个对象合并也是深拷贝,不会影响原来对象
                let stu = {name: "小红", age: 18};
                let car = {brand: "奔驰", price: 800000};
                let stu_car = {...stu, ...car}
                stu_car.brand = "比亚迪";
                console.log("stu=>", stu);
                console.log("stu_car=>", stu_car);
            }

箭头函数

箭头函数提供更加简洁的函数书写方式;

箭头函数的语法为 (参数列表) => {函数体} ;

箭头函数多用于匿名函数的定义

实例演示:

//无参数
{
    //传统定义函数
    let f1 = function(){
        console.log("传统定义函数")
    }
    
    //ES6箭头函数
    let f2 = () => {
         console.log("ES6箭头函数")
    }
    f1();
    f2();
    
     //只有一条语句的箭头函数可以省略花括号
    let f3 = () =>
    console.log("f3---ES6箭头函数")
    f3();
}
//有一个参数
{
     //只有一个参数的箭头函数,可以省略()
    let f4 = data =>
    console.log("f4---ES6箭头函数有一个参数",data)
    f4("靓仔,点个赞吧!");
}

promise (解决传统ajax多层嵌套问题)

//resolve成功后使用的函数,reject失败时使用的函数
let p = new Promise( (resolve,reject) =>{
    $.ajax({
        url:"",
        success(resultData){
            //只有调用了resolve,之后才能使用回调函数then
             resolve(resultData)
        },
        error(err){
            reject(err);  
        }
    })
})  
​
//成功后回调,继续发送ajax请求
p.then((resultData) =>{
    return new Promise({
        $ajax({
            url:"",
            success(resultData){
                resolve(resultData)
            },
            error(err){
                reject(err);  
            }
        })
    })
}).then((resultData) =>{
    
}).catch(err =>{
    
})
//ajax+promise,解决了传统ajax的多次调用,但是原生方式,也不美观,可以使用代码重排,变得简洁

promise 代码重排

//封装重复代码
function get(url, data) {
    return new Promise((resolve, reject) => {
        $.ajax({
            url: url,
            data: data, 
             success(resultData) {
                 resolve(resultData);
            },
            error(err) {
                reject(err);
            }
        })
    })
}
//调用get函数
get("data/monster.json").then((resultData) => {
    
    //第 1 次 ajax 请求成功后的处理代码
    console.log("第 1 次 ajax 请求返回数据=", resultData);
        return get(`data/monster_detail_${resultData.id}.json`);
    })
​
    .then((resultData) => {
    //第 2 次 ajax 请求成功后的处理代码
    console.log("第 2 次 ajax 请求返回数据=", resultData);
        return get(`data/monster_gf_${resultData.gfid}.json`);
    })
​
    .then((resultData) => {
    //第 3 次 ajax 请求成功后的处理代码
        console.log("第 3 次 ajax 请求返回数据=", resultData);
    //继续.. })
    .catch((err) => {
        console.log("promise 请求异常=", err);
    })

模块化编程(目标:在一个js文件中,使用另一个js文件)

ES5

ES5中,默认是每个js文件都是一个模块,每个文件都有自己的作用域,

需要时导出 ,module.exports = {对象,函数},

使用时,导入,let/const 名称m = require("xx.js")

接着,就可以通过名称m,访问module中的对象

简写:module.exports => exports

ES6

导出:

  • 1、export{名称/变量/函数/对象/常量} (批量导出)

  • 2、export 定义 = (定义时导出)

  • 3、export default{} (默认导出)

导入

  • import{} from "xx.js"

  • import 名称 from "xx.js" (3)针对默认导出的语法

细节:

  • export {} 导出时,import导出时需要名称保持一致

  • export default {

},默认导出,需要使用时,导出格式为: import 名称m from "xx.js",相当于{} 是一个 m 对象,

使用时,可以 m.属性 ,因为可以自己取名,解决命名冲突问题

  • 一切js对象皆可以导出

  • es6模块化不能使用node.js,需要使用Babel转码ES5后再执行(暂时没学)

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值