ECMAScript版本知识点汇总

ECMAScript版本知识点汇总

ES5

btoa、atob

对参数进行base64格式编码、解码

/**
* btoa()
* base64编码
* @param {string} str
* @return {base64} encodeStr
**/
const str = 'myName is zzz'
window.btoa(str) // 'bXlOYW1lIGlzIHp6eg=='
/**
* atob()
* base64解码
* @param {base64} encodeStr base64字符串
* @return {string} str
**/
const encodeStr = 'bXlOYW1lIGlzIHp6eg=='
window.atob(encodeStr)  // 'myName is zzz'

encodeURIComponent、dencodeURIComponent

对参数进行UTF-8格式编码、解码

作用与上个知识点基本相同,多用于URL中传递中文参数乱码问题

/**
* encodeURIComponent()
* URL编码
* @param {string} url
* @return {UTF-8} encodeURLStr
**/
const url = 'https://www.baidu.com?name=zzz&age=18'
window.encodeURIComponent(url) // 'https%3A%2F%2Fwww.baidu.com%3Fname%3Dzzz%26age%3D18'
/**
* dencodeURIComponent()
* URL解码
* @param {UTF-8} encodeURLStr
* @return {string} url
**/
const encodeURLStr = 'https%3A%2F%2Fwww.baidu.com%3Fname%3Dzzz%26age%3D18'
window.dencodeURIComponent(encodeURLStr)  // 'https://www.baidu.com?name=zzz&age=18'

ES6

let、const

新的数据声明方式,两者都具有 块级作用域、无变量提升、不能重复声明、具有暂时性死区

const表示常量,声明时必须赋值且无法修改。

解构赋值

可用于数组、对象,快速获取内部指定元素

// 对象解构
const user = {
    name: 'zzz',
    age: 18
}
const { name, age } = user  // name='zzz', age=18
// 数组解构
const arr = [1, 2, 3]
[a, b, c] = arr    // a=1, b=2, c=3

模板语法

允许在 HTML 中之插入 JS 变量以及表达式

const name = 'zzz'
console.log(你好,我是${name}!)   // '你好,我是zzz'

扩展运算符

将一个数组转为用逗号分隔的参数序列,对象也可使用

// 数组
const arr = [1, 2, 3]
[...arr, 4, 5]  // [1, 2, 3, 4, 5]
// 对象
const obj = { name: 'zzz' }
{...obj, age: 18 }    //  { name: 'zzz', age: 18 }
// 搭配解构赋值
[a1, ...a2] = [1, 2, 3]    // a2 = [2, 3]

箭头函数

不会创建自己的this,它只会从自己的作用域链的上一层继承this

const fun = (a, b) => { a + b }
// 只有单条return语句可以省略{}
// ...args剩余参数
const fun2 = (...args) => args.reduce((pre,cur) => pre+cur)
fun2(1) // 1
fun2(1, 2)  // 3

Set数据结构

特性是成员都是唯一的,返回一个类数组

// 数组去重
// 需搭配Array.from()或...扩展运算符转换为真数组
Array.from(new Set([1,2,1]))    // [1, 2]
[...new Set([1,2,1])]   // [1, 2]

ES7

幂操作符

顾名思义,用于实现幂次方操作,与Math.pow()是等价的

const num = 2**3    // 8
const num2 = Math.pow(2, 3) // 8

includes

判断value是否在数组内,返回Boolean类型值

const arr = [-1, -0]

arr.includes(-1) // true
arr.includes(1) // false

// 注意:不会区分 +0、-0、0
arr.includes(-0) // true
arr.includes(0) // true

ES8

padStart、padEnd

用于在字符串(开头/结尾)填充字符

'1'.padStart(2, '0')    // '01'
'2'.padEnd(4, '021')    // '2021'
// 可实现时间格式化
// ...代码略

async/await

将异步函数转换成同步函数,解决JS异步调用、回调地狱等问题

async function fun() {
    await fun2()    // 阻塞线程,等待回调
    console.log('等await返回了,我才被执行')
}

ES11

可选链运算符

为了简化访问深层嵌套的属性的操作,避免需要写多个的&&链去检查每个属性是否存在

let name = result && result.data && result.data.name
// 可选链运算符写法
let name = result?.data?.name

空值合并运算符

为了避免参数设置默认值时,使用 || 运算符会导致 false 、0 , ‘ ‘等属性值被覆盖掉,导致运算结果不准确

let nullValue = false   // 或0或''
const value = nullValue || true    //  true,原值false被覆盖,不是预期效果
// 空值合并运算符写法
const value = nullValue ?? true    //  false

Promise.allSettled

如果一个Promise任务失败了,其他任务还会继续执行,这样才能最大限度的保障业务的可用性

Promise.allSettled([promise1, promise2])
    .then((results) => results.forEach((result) => console.log(result)))
// {status: "fulfilled", value: "ok"},{status: "rejected", reason: "bad"}

BigInt

Number类型只能安全的表示-(2^53-1) 至 2^53-1范围的值,超出这个范围的整数计算或者表示会丢失精度

let bigIntNum = 9007199254740993n   // 或 BigInt(9007199254740993)
let big = 9007199254740994n + 9007199254740994n   // 结果为 18014398509481988n

⚠️ BIgInt 与 Number 不严格相等,即
123n == 123  // true
123n === 123  // false

项目配置

项目中使用ES11(2020),只需要在babel配置文件中添加以下语句

{
  "presets":  ["es2020"]
}

未完待续

原文-有道云笔记链接

Original: https://www.cnblogs.com/zh1q1/p/15243030.html
Author: 吴知木
Title: ECMAScript版本知识点汇总

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/599035/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • RadonDB MySQL Kubernetes 2.2.0 发布!

    摘要 RadonDB MySQL Kubernetes v2.2.0 于近日发布!该版本开始支持 MySQL 8.0,备份功能优化,并全面提升高可用稳定性。社区同步发起&#8221…

    数据库 2023年5月24日
    095
  • innobackupex备份源码解析

    目前MySQL的物理备份大多数采用xtrabackupex进行,其备份过程如下图所示,这里通过解析 xtrabackup 的源码来详细看看其是如何进行备份的,xtrabackup …

    数据库 2023年6月9日
    098
  • 工程师成长阶段感悟

    从 2013 年陆续开始做软件研发工作, 去过不少公司, 做过一些类型项目, 桌面开发, web 开发, 手游开发, 端游开发, 棋牌, 视频云服务, 电商. 刚毕业那会在国企, …

    数据库 2023年6月9日
    082
  • etcd和Zookeeper孰优孰劣对比

    背景 最近在看到Pachyderm的介绍时,看到作者拿YARN和Kubernetes做类比,拿Zookeeper和etcd做对比。YARN和Kubernetes的类比还相对比较好理…

    数据库 2023年6月11日
    082
  • 社招两年半10个公司28轮面试面经(含字节、拼多多、美团、滴滴……)

    个人情况 学历:二本 工作年限:2 年半 面试结果:拿到了字节、拼多多、美团、滴滴、欧科云链….等公司的offer 面试准备 复习 你信我,真学习还得看书,看书能让你的…

    数据库 2023年6月16日
    087
  • HttpServletRequest 类

    HttpServletRequest类有什么作用 HttpServletRequest 类的常用方法 如何获取请求参数 doGet 请求的中文乱码解决: POST 请求的中文乱码解…

    数据库 2023年6月11日
    071
  • JUC学习笔记(六)

    JUC 中提供了三种常用的辅助类,通过这些辅助类可以很好的解决线程数量过多时 Lock 锁的频繁操作。这三种辅助类为: CountDownLatch: 减少计数 CyclicBar…

    数据库 2023年6月6日
    091
  • Atlas快速入门

    之前的公司在数据中台的项目上调研决定启用了Atlas作为我们数据血缘管理的工具,让我给大家写了一份Atlas快速入门的文档,所以在这里我将这篇文档以一个纯新手视角的方式再一次优化,…

    数据库 2023年6月11日
    086
  • java 桥接方法

    1.桥接方法简介 桥接方法是jdk1.5引入泛型后,为使java泛型方法生成的字节码与jdk1.5版本之前的字节码兼容由编译器自动生成的。 可用 method.isBridge()…

    数据库 2023年6月16日
    088
  • Tomcat的安装和使用

    一·Tomcat 安装 1、Toncat下载 通过访问Tomcat官方网站下载Tomcat文件。 Tomcat提供了压缩版和安装版,还区分 32 位和 64 位系统版。下载的时候注…

    数据库 2023年6月11日
    086
  • 使用MySQL,SQL_MODE有哪些坑,你知道么?

    SQL_MODE是MySQL中的一个系统变量(variable),可由多个MODE组成,每个MODE控制一种行为,如是否允许除数为0,日期中是否允许’0000-00-0…

    数据库 2023年6月11日
    076
  • 2_CSS

    1. 什么是CSS 1.1 什么是CSS Cascading Style Sheet 层叠样式表 是一种用来表现HTML(标准通用标记语言的一个应用)或XML(标准通用标记语言的一…

    数据库 2023年6月11日
    048
  • SQL练习六–More JOIN operations

    Field nameTypeNotes id INTEGER An arbitrary unique identifier title CHAR(70) The name of t…

    数据库 2023年6月16日
    075
  • gh-ost使用问题记录

    因为 pt-osc 对数据库性能影响较大,且容易造成死锁问题,目前我们在线更改表结构都使用 gh-ost 工具进行修改,这里记录一下使用 gh-ost 过程中的问题,以作记录;首先…

    数据库 2023年6月9日
    074
  • MySQL锁(乐观锁、悲观锁、多粒度锁)

    锁 并发事务可能会发生什么情况: [En] What may happen to concurrent transactions: 读-读事务并发:此时是没有问题的,读操作不会对记…

    数据库 2023年5月24日
    083
  • MySQL45讲之查询慢或者阻塞

    前言 本文介绍了表锁定和执行速度慢的实例,以及表锁定时的故障排除方法。 [En] This paper introduces examples of table locking a…

    数据库 2023年5月24日
    0101
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球