缝缝补补

关于ES6+

var, let, const

块级作用域

  • let/const: 具有块级作用域;
  • let是函数作用域。存在变量提升,允许重复声明;
  • const还需在声明时初始化且不可重新赋值(但对象/数组内容可修改);

箭头函数与普通函数

箭头函数

  • 无自身this,继承外层上下文(指向创建时父级的this);
  • 没有prototype属性,不能进行new实例化;

普通函数 有自己的this,由调用方式决定;

关于Promise

Promise是异步编程的一种解决方案,解决回调地狱的问题;

Promise解决异步操作的有点

  • 链式操作降低了编码难度;
  • 代码可读性明显增强;

Promise对象的三种状态: pending(进行中), fulfilled(已成功), rejected(已失败);

Promise构造函数接受一个函数作为参数,该函数的两个参数分别是resolve和reject;

resolve函数的作用是,将Promise对象的状态从"未完成"变为"成功";

reject函数的作用是,将Promise对象的状态从"未完成"变为"失败";

Promise构造函数存在以下方法: then(), catch(), finally();

then(): resolved状态的回调函数;then方法返回的是一个新的Promise实例,也就是promise能链式书写的原因(返回普通值,普通的值被作为一个新的promise的resolve值;)

catch():用于指定发生错误时的回调函数;

finally():方法用于指定不管Promise对象最后状态如何,都会执行的操作;

Promise构造函数存在的方法

javascript 复制代码
    Promise.all(): 任意一个promise被reject,Promise.all就会被reject, 不在执行then().
    promise.assSettled(): 相互独立,可以获取数组中每个Promise的结果,无论成功或失败只有then方法; 所有结果都会在then中体现;
    Promise.rece: 多个promise执行,最快得执行Promise.race()的then或者catch,里面的promise依旧会执行;
    

Async函数

定义asyncawait是 JavaScript 处理[异步操作]的语法糖,基于 Promise 实现。

目的 : 让异步代码的书写和阅读更接近同步代码,解决"[回调地狱]" 和 Promise 链式调用冗长的问题。

js 复制代码
 //async函数返回一个Promise对象;
 //函数内部return语句返回的值,会成为then方法回调函数的参数;
    async function f() {
      return 'hello world';
    }

    f().then(v => console.log(v))
    // "hello world"

设计:

  • async是用来声明一个异步函数,该函数返回一个promise对象;await用来等待一个promise完成,并获取其结果;
  • 当函数执行的时候,一旦遇到awiait就会先返回,等到触发的异步操作完成,再接着执行函数体内后的语句; 实现: async/await语法糖就是使用Generator函数+自动执行器来运作的;

ES6 Module语法(模块)及与CommonJS模块的差异

概述: 将一个大程序拆分成互相依赖的小文件,再用简单的方法拼装起来。

模块功能主要由两个命令构成:exportimport. export命令用于规定模块的对位接口,import命令用于输入其他模块提供的功能。

export default命令用于指定模块的默认输出,一个模块只能有一个默认输出。

js 复制代码
    export default function foo() { console.log('foo'); }
    // 或者写成
    function foo() { console.log('foo'); }
    export default foo;
    1,`export default`时,对应的`import`语句不需要使用大括号;
    import foo from 'foo';
    export function foo {
        console.log('foo');
    }
    2, 不使用`export default`时,对应的`import`语句需要使用大括号
    import { foo } from 'foo'

差异

markdown 复制代码
  -   CommonJS 模块输出的是一个值的拷贝,ES6 模块输出的是值的引用。
  -   CommonJS 模块是运行时加载,ES6 模块是编译时输出接口。
  -   CommonJS 模块的`require()`是同步加载模块,ES6 模块的`import`命令是异步加载,有一个独立的模块依赖的解析阶段。

ES6 Set和Map数据结构

基本用法

Set:类似于数组。但是成员的值都是唯一的,没有重复的值;

Map:本质上是键值对的集合;

区别:

arduino 复制代码
    唯一性:set元素是唯一的,map键是唯一的;
    set存储的是单个元素,map存储的是键值对;
js 复制代码
    ` Map和Object的区别 `
     1.键的类型不同:
     Object: 只允许使用字符串或符号作为键。其他类型的键(如数字或对象)会被自动转化为字符串;
     Map: 可以使用任意类型的值作为键;
     2.键值对的遍历:
     Object: for...in, Object.keys(), Object.values(),
     Map: for...of
     3. 键的顺序
     Object: 对象的属性迭代顺序通常是无序的;
     Map: 保持键值对的插入顺序,每次迭代都按照插入顺序进行;
     4. 内存占用和性能
     Map处理大量数据通常比Object更有效率;Object由于对象的属性名和值是动态绑定的,可能会导致内存使用效率较低;
     5. Map不具有原型链;

ES6 其他知识

模板字符串解构运算符(?. ||)

相关推荐
步行cgn13 分钟前
Vue 中的数据代理机制
前端·javascript·vue.js
GH小杨18 分钟前
JS之Dom模型和Bom模型
前端·javascript·html
星月心城1 小时前
JS深入之从原型到原型链
前端·javascript
MessiGo1 小时前
Javascript 编程基础(5)面向对象 | 5.2、原型系统
开发语言·javascript·原型模式
你的人类朋友2 小时前
🤔Token 存储方案有哪些
前端·javascript·后端
烛阴2 小时前
从零开始:使用Node.js和Cheerio进行轻量级网页数据提取
前端·javascript·后端
liuyang___2 小时前
日期的数据格式转换
前端·后端·学习·node.js·node
西哥写代码2 小时前
基于cornerstone3D的dicom影像浏览器 第三十一章 从PACS服务加载图像
javascript·pacs·dicom
贩卖纯净水.3 小时前
webpack其余配置
前端·webpack·node.js