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)

大家都在看

  • SQL Server内置的HTAP技术

    SQL Server内置的HTAP技术 目录 背景 SQL Server在OLAP上的发展 SQL Server的初代HTAP SQL Server逐渐增强的HTAP SQL Se…

    数据库 2023年6月9日
    0131
  • [spring]spring静态代理和aop

    10.代理模式 代理模式的分类: 静态代理 动态代理 关系分析 抽象角色:一般会使用接口或者抽象类 真实角色:被代理的角色 代理角色:代理真实的角色,做一些附属的操作 客户:访问代…

    数据库 2023年6月16日
    092
  • [Npoi]Npoi导入Excel, 转为Entity

    Npoi导入Excel其实只要读成DataTable就可以随意操作了, 比如转为Entity… By: 胖纸不争NetCore🐧群: 743336452 核心代码: p…

    数据库 2023年6月9日
    088
  • SSM配置文件的连接

    使用ssm框架配置数据库连接时的问题 如果MySQL数据库版本是8.0.11, url配置成了MySql5.0以上版本需要的驱动类名(com.mysql. cj.jdbc.Driv…

    数据库 2023年6月14日
    077
  • PLSQL_developer安装与配置

    前言: 记录安装与配置操作 环境: 客户机:windows服务器:虚拟机中的windows server 2003/————&#82…

    数据库 2023年6月11日
    090
  • 数据库原理三—MySQL数据库优化

    MySQL优化 MySQL优化分为以下几个大类: 数据库调优在一般情况下都是SQL调优,那么,应该如何进行SQL调优呢? id select_type description 1 …

    数据库 2023年6月6日
    0236
  • Spring AOP

    AOP简介: 面向切面编程,通过预编译方式和运行期间动态代理实现程序功能的统一维护的一种技术。 *作用:在不惊动原始设计的基础上为其进行功能增强。 AOP核心概念 (1)Aspec…

    数据库 2023年6月16日
    0102
  • mybatis order by concat用法

    由于项目中用到了一个关联查询,关联的表中都有id字段,在排序时,使用${id},获取值时,一直报 Column ‘id’ in order clause i…

    数据库 2023年6月11日
    081
  • 设计模式之(8)——代理模式

    定义:为某个对象提供一个代理,以达到对这个对象的访问控制,代理类和委托类有共同的父类或者父接口,这样可以在使用委托类的地方都可以使用代理对象来替换(这符合程序设计中的”…

    数据库 2023年6月14日
    081
  • 16 两个对象值相同(x.equals(y) == true),但却可以有不同的hashCode,这句话对不对?

    不对,如果两个对象x和y满足x.equals(y) == true,那么他们的哈希码应该相同。 根据hashCode方法协定:在每个重写了equals方法的类中,必须重写hashC…

    数据库 2023年6月6日
    080
  • 【MySQL】笔记(3)— 连接查询;子查询;union;limit;

    一.连接查询: 1.1、什么是连接查询?在实际开发中,大多数情况下并不是从单个表中查询数据,而是通常通过多个表的联合查询来获得最终结果。 [En] In the actual de…

    数据库 2023年5月24日
    077
  • MySQL执行一条查询语句的过程

    查询缓存 在解析一个查询语句之前,如果查询缓存时打开的,那么 MySQL 会优先检查这个查询是否命中查询缓存中的数据。这个检查时通过一个对大小写敏感的哈希查找实现的。查询和缓存中的…

    数据库 2023年5月24日
    0104
  • 使用 yum 在 CentOS7 上安装 MySQL8

    时间:2022-07-13安装版本:MySQL-community-8.0.29 0. 删除MariaDB 在CentOS 7中默认有安装MariaDB,这个是MySQL的分支,通…

    数据库 2023年5月24日
    0139
  • mysql 5.7命令行安装(windows)

    下载mysql-5.7.xx-winx64 ZIP版,https://dev.mysql.com/downloads/mysql/5.7.html 拷贝压缩包文件mysql-5.7…

    数据库 2023年5月24日
    076
  • Hadoop_mapreduce统计文本单词

    Hadoop MapReduce是一个软件框架,基于该框架能够容易地编写应用程序,这些应用程序能够运行在由上千个商用机器组成的大集群上,并以一种可靠的,具有容错能力的方式并行地处理…

    数据库 2023年6月11日
    084
  • 动手实验查看MySQL索引的B+树的高度

    一:文中几个概念 h:统称索引的高度;h1:主键索引的高度;h2:辅助索引的高度;k:非叶子节点扇区个数。 二:索引结构 叶节点实际上是一个双向链表,而叶节点中的行数据是一个单向链…

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