美文网首页
ES6学习笔记

ES6学习笔记

作者: Zerek_W | 来源:发表于2021-12-13 21:45 被阅读0次

    1.let关键字


    let 关键字用来声明变量,使用 let 声明的变量有几个特点:

    1. 不允许重复声明;
    2. 块儿级作用域(局部变量);
    3. 不存在变量提升;
    4. 不影响作用域链;

    2.const关键字


    const 关键字用来声明常量,const 声明有以下特点:

    1. 声明必须赋初始值;
    2. 标识符一般为大写(习惯);
    3. 不允许重复声明;
    4. 值不允许修改;
    5. 块儿级作用域(局部变量);

    3.变量和对象的解构赋值


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

    const arr = [1,2,3,4]
    let [a,b,c,d] = arr
    
    const F3 = {
    name : "大哥",
    age : 22,
    sex : "男",
    xiaopin : function(){ // 常用
    应用场景:
    频繁使用对象方法、数组元素,就可以使用解构赋值形式;
    console.log("我会演小品!");
    }
    }
    let {name,age,sex,xiaopin} = F3; // 注意解构对象这里用的是{}
    console.log(name + age + sex + xiaopin); // 大哥22男
    xiaopin(); // 此方法可以正常调用
    

    4.模板字符串


    模板字符串(template string)是增强版的字符串,用反引号(`)标识,特点:
    字符串中可以出现换行符;
    可以使用 ${xxx} 形式引用变量;
    代码演示及相关说明:

    let s = "s";
    let out = `${s} b`;
    

    5.简化对象和函数写法


    ES6 允许在大括号里面,直接写入变量和函数,作为对象的属性和方法。这样的书写更加简洁;

    let name = "訾博";
    let change = function(){
    console.log("活着就是为了改变世界!");
    }
    //创建对象
    const school = {
    // 完整写法
    // name:name,
    // change:change
    // 简化写法
    name,
    change,
    // 声明方法的简化
    say(){
    console.log("言行一致!");
    }
    }
    

    6.箭头函数


    ES6允许使用箭头(=>)定义函数,箭头函数提供了一种更加简洁的函数书写方式,箭头函数多用于匿名函数的定义;
    箭头函数的注意点:

    1. 如果形参只有一个,则小括号可以省略;
    2. 函数体如果只有一条语句,则花括号可以省略,函数的返回值为该条语句的执行结果;
    3. 箭头函数 this 指向声明时所在作用域下 this 的值;
    4. 箭头函数不能作为构造函数实例化;
    5. 不能使用 arguments;
    var hello = function(name){
      return "hello"+name;
    }
    
    let hello = name => "hi" + name;
    let hello = (name) =>{return "hi" + name;}
    let speak = () => console.log("speak");
    

    7.ES6中函数参数的默认值


    ES允许给函数的参数赋初始值;

    8.rest参数


    ES6 引入 rest 参数,用于获取函数的实参,用来代替 arguments;

    // ES6的rest参数...args,rest参数必须放在最后面
    function data(...args){
    console.log(args); // fliter some every map
    }
    data("大哥","二哥","三哥","四哥");
    

    9.扩展运算符


    ... 扩展运算符能将数组转换为逗号分隔的参数序列;
    扩展运算符(spread)也是三个点(...)。它好比 rest 参数的逆运算,将一个数组转为用逗号分隔的参数序列,对数组进行解包;

    const tfboys = ['易烊千玺', '王源', '王俊凯'];
    ...tfboys // => '易烊千玺','王源','王俊凯'
    

    10.Symbol


    Symbol 概述:
    ES6 引入了一种新的原始数据类型 Symbol,表示独一无二的值。它是JavaScript 语言的第七种数据类型,是一种类似于字符串的数据类型;
    Symbol 特点:

    1. Symbol 的值是唯一的,用来解决命名冲突的问题;
    2. Symbol 值不能与其他数据进行运算;
    3. Symbol 定义的对象属性不能使用for…in循环遍历 ,但是可以使用Reflect.ownKeys 来获取对象的所有键名;
    let s = Symbol();
    // console.log(s, typeof s);
    let s2 = Symbol('尚硅谷');
    Symbol创建对象属性:
    let s3 = Symbol('尚硅谷');
    console.log(s2==s3); // false
    //Symbol.for 创建
    let s4 = Symbol.for('尚硅谷');
    let s5 = Symbol.for('尚硅谷');
    console.log(s4==s5); // true
    

    Symbol创建对象属性:

    // 向对象中添加方法 up down
    let game = {
    name:'俄罗斯方块',
    up: function(){},
    down: function(){}
    };
    // 我们要往game对象里面添加方法,但是怕game对象已经存在
    // 同名方法,所以我们这时使用到了Symbol
    // 方式一
    // 声明一个对象
    let methods = {
    up: Symbol(),
    down: Symbol()
    };
    game[methods.up] = function(){
    console.log("我可以改变形状");
    }
    game[methods.down] = function(){
    
    console.log("我可以快速下降!!");
    }
    console.log(game)
    

    Symbol内置值:
    概述:
    除了定义自己使用的 Symbol 值以外,ES6 还提供了 11 个内置的 Symbol 值,指向语言内部使用的方
    法。可以称这些方法为魔术方法,因为它们会在特定的场景下自动执行;

    11.迭代器


    遍历器(Iterator)就是一种机制。它是一种接口,为各种不同的数据结构提供统一的访问机制。任何数
    据结构只要部署 Iterator 接口,就可以完成遍历操作;
    ES6 创造了一种新的遍历命令 for...of 循环,Iterator 接口主要供 for...of 消费;
    原生具备 iterator 接口的数据(可用 for of 遍历):
    工作原理:

    1. 创建一个指针对象,指向当前数据结构的起始位置;
    2. 第一次调用对象的 next 方法,指针自动指向数据结构的第一个成员;
    3. 接下来不断调用 next 方法,指针一直往后移动,直到指向最后一个成员;
    4. 每调用 next 方法返回一个包含 value 和 done 属性的对象;
    const xiyou = ['唐僧', '孙悟空', '猪八戒', '沙僧'];
    let iterator = xiyou[Symbol.iterator]();
    console.log(iterator.next());
    console.log(iterator.next());
    console.log(iterator.next());
    console.log(iterator.next());
    console.log(iterator.next());
    
    

    12.生成器


    生成器函数是 ES6 提供的一种异步编程解决方案,语法行为与传统函数完全不同;

    // 生成器其实就是一个特殊的函数
    // 异步编程 纯回调函数 node fs ajax mongodb
    // yield:函数代码的分隔符
    function* gen() {
    console.log(111);
    yield '一只没有耳朵';
    console.log(222);
    yield '一只没有尾部';
    console.log(333);
    yield '真奇怪';
    console.log(444);
    }
    let iterator = gen();
    console.log(iterator.next());
    console.log(iterator.next());
    console.log(iterator.next());
    console.log(iterator.next());
    
    

    生成器函数的参数传递:

    console.log(arg);
    let one = yield 111;
    console.log(one);
    let two = yield 222;
    console.log(two);
    let three = yield 333;
    console.log(three);
    }
    let iterator = gen("AAA");
    console.log(iterator.next()); // 会执行yield 111;
    // next()方法是可以传入参数的,传入的参数作为第一条(上一条)语句yield 的返回值
    //若没有指定参数,则one为undefined
    console.log(iterator.next("BBB")); // 会执行yield 222;
    console.log(iterator.next("CCC")); // 会执行yield 333;
    console.log(iterator.next("DDD")); // 继续往后走,未定义;
    

    13.Promise


    Promise 是 ES6 引入的异步编程的新解决方案。语法上 Promise 是一个构造函数,用来封装异步操作
    并可以获取其成功或失败的结果;

    1. Promise 构造函数: Promise (excutor) {};
    2. Promise.prototype.then 方法;
    3. Promise.prototype.catch 方法;
    const p = new Promise(function(resolve,reject){
    setTimeout(function(){
    // 成功
    // let data = "数据";
    // 调用resolve,这个Promise 对象的状态就会变成成功
    // resolve(data);
    // 失败
    let err = "失败了!";
    reject(err);
    },1000);
    });
    // 成功
    // 调用 Promise 对象的then方法,两个参数为函数
    p.then(function(value){ // 成功
    console.log(value);
    }, function(season){ // 失败
    console.log(season);
    });
    

    14.Set集合


    ES6 提供了新的数据结构 Set(集合)。它类似于数组,但成员的值都是唯一的,集合实现了 iterator
    接口,所以可以使用『扩展运算符』和『for…of…』进行遍历,集合的属性和方法:

    1. size 返回集合的元素个数;
    2. add 增加一个新元素,返回当前集合;
    3. delete 删除元素,返回 boolean 值;
    4. has 检测集合中是否包含某个元素,返回 boolean 值;
    5. clear 清空集合,返回 undefined;
    // Set集合
    let s = new Set();
    console.log(s,typeof s);
    let s1 = new Set(["大哥","二哥","三哥","四哥","三哥"]);
    console.log(s1); // 自动去重
    

    15.Map集合


    ES6 提供了 Map 数据结构。它类似于对象,也是键值对的集合。但是“键”的范围不限于字符串,各种类
    型的值(包括对象)都可以当作键。Map 也实现了iterator 接口,所以可以使用『扩展运算符』和
    『for…of…』进行遍历;
    Map 的属性和方法:

    1. size 返回 Map 的元素个数;
    2. set 增加一个新元素,返回当前 Map;
    3. get 返回键名对象的键值;
    4. has 检测 Map 中是否包含某个元素,返回 boolean 值;
    5. clear 清空集合,返回 undefined;
    let m = new Map();
    // 创建一个非空 map
    let m2 = new Map([
    ['name','尚硅谷'],
    ['slogon','不断提高行业标准']
    ]);
    m2.set("皇帝","大哥");
    
    image.png

    16.Class


    ES6 提供了更接近传统语言的写法,引入了 Class(类)这个概念,作为对象的模板。通过 class 关键字,可以定义类。基本上,ES6 的 class 可以看作只是一个语法糖,它的绝大部分功能,ES5 都可以做到,新的 class 写法只是让对象原型的写法更加清晰、更像面向对象编程的语法而已;
    知识点:

    1. class 声明类;
    2. constructor 定义构造函数初始化;
    3. extends 继承父类;
    4. super 调用父级构造方法;
    5. static 定义静态方法和属性;
    6. 父类方法可以重写;

    17.数值扩展


    Number.EPSILON:
    Number.EPSILON 是 JavaScript 表示的最小精度;
    EPSILON 属性的值接近2.2204460492503130808472633361816E-16;
    二进制和八进制:
    ES6 提供了二进制和八进制数值的新的写法,分别用前缀 0b 和 0o 表示;
    Number.isFinite() 与 Number.isNaN()
    Number.parseInt() 与 Number.parseFloat()
    Math.trunc:
    用于去除一个数的小数部分,返回整数部分;
    Number.isInteger:
    Number.isInteger() 用来判断一个数值是否为整数;

    18.对象扩展


    ES6 新增了一些 Object 对象的方法:

    1. Object.is() 比较两个值是否严格相等,与『===』行为基本一致(+0 与 NaN);
    2. Object.assign 对象的合并,将源对象的所有可枚举属性,复制到目标对象;
    3. proto、setPrototypeOf、 setPrototypeOf 可以直接设置对象的原

    19.模块化


    概述:
    模块化是指将一个大的程序文件,拆分成许多小的文件,然后将小文件组合起来;
    模块功能主要由两个命令构成:export 和 import;
    export 命令用于规定模块的对外接口(导出模块);
    import 命令用于输入其他模块提供的功能(导入模块);
    ES6暴露数据语法汇总:
    逐个导出模块
    统一导出模块
    默认导出模块
    // 引入m.js模块内容
    import * as m from "./js/m.js";

    20.Babel对ES6模块化代码转换


    Babel概述:
    Babel 是一个 JavaScript 编译器;
    Babel 能够将新的ES规范语法转换成ES5的语法;
    因为不是所有的浏览器都支持最新的ES规范,所以,一般项目中都需要使用Babel进行转换;
    步骤:使用Babel转换JS代码——打包成一个文件——使用时引入即可;

    相关文章

      网友评论

          本文标题:ES6学习笔记

          本文链接:https://www.haomeiwen.com/subject/kqesfrtx.html