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"]
}

未完待续

原文-有道云笔记链接

ECMAScript版本知识点汇总的更多相关文章

  1. nginx几个知识点汇总

    WHY? 为什么用Nginx而不用LVS? 7点理由足以说明一切:1 .高并发连接: 官方测试能够支撑 5 万并发连接,在实际生产环境中跑到 2 - 3 万并发连接数.?2 .内存消耗少: 在 3 万 ...

  2. JavaScript ECMAScript版本介绍

    1. 介绍 1.1 什么是ECMAScript ECMAScript,简称ES,是由Ecma国际(前身为欧洲计算机制造商协会,英文名称是European Computer Manufacturers ...

  3. Kafka各个版本差异汇总

    Kafka各个版本差异汇总   从0.8.x,0.9.x,0.10.0.x,0.10.1.x,0.10.2.x,0.11.0.x,1.0.x或1.1.x升级到2.0.0 Kafka 2.0.0引入了线 ...

  4. python全栈开发 * 10知识点汇总 * 180612

    10 函数进阶 知识点汇总 一.动态参数 形参的第三种1.动态接收位置传参 表达:*args (在参数位置编写 * 表⽰接收任意内容) (1)动态位置参数def eat(*args): print(a ...

  5. 清华大学OS操作系统实验lab1练习知识点汇总

    lab1知识点汇总 还是有很多问题,但是我觉得我需要在查看更多资料后回来再理解,学这个也学了一周了,看了大量的资料...还是它们自己的80386手册和lab的指导手册觉得最准确,现在我就把这部分知识做 ...

  6. c++ 函数知识点汇总

    c++ 函数知识点汇总 swap函数 交换两个数组元素 比如 swap(a[i],a[j]); 就是交换a[i] 和 a[j] 的值 strcpy() 复制一个数组元素的值到另一个数组元素里 strc ...

  7. 前端开发 JavaScript 干货知识点汇总

    很多初学的朋友经常问我,前端JavaScript都需要学习哪些东西呀?哪些是JavaScript的重点知识啊? 其实做前端开发工程师,所有的知识点都是我们学习必备的东西,只有扎实的技术基础才是高薪的关 ...

  8. BBS项目知识点汇总

    目录 bbs项目知识点汇总 一. JavaScript 1 替换头像 2 form表单拿数据 3 form组件error信息渲染 4 添加html代码 5 聚焦操作 二 . html在线编辑器 三 . ...

  9. win7+cuda+anaconda python+tensorflow-gpu+keras安装成功版本匹配汇总

    win7+cuda+anaconda python+tensorflow-gpu+keras安装成功版本匹配汇总 2019-09-20 15:06:03 wyx100 阅读数 38更多 分类专栏: M ...

随机推荐

  1. 在js中对属性的操作

    一:访问属性 两种方法: ①:对象名.属性名 function  test(sno,age,sex){      this.sno=sno,      this.age=age, this.sex=s ...

  2. OpenFaaS实战之九:终篇,自制模板(springboot+maven+jdk8)

    欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...

  3. 《手把手教你》系列技巧篇(十五)-java+ selenium自动化测试-元素定位大法之By xpath中卷(详细教程)

    1.简介 按宏哥计划,本文继续介绍WebDriver关于元素定位大法,这篇介绍定位倒数二个方法:By xpath.xpath 的定位方法, 非常强大.  使用这种方法几乎可以定位到页面上的任意元素. ...

  4. Linux 内核的代码仓库太不一样了,光克隆都让我挠头,克隆后居然还丢文件,你肯定也会遇到!!!

    一个肯定能让你节省几个小时的小知识 大家好,我是 小猿来也,一个人称撸(划)码(水)小能手的程序猿. 最近一段时间,每次经过旁边大佬工位,总是发现他在快速的切屏,不知道在搞什么?难道他发现了快乐星球? ...

  5. Nacos 权限控制介绍及实战

    方案背景 Nacos自开源依赖,权限控制一直需求比较强烈,这也反应了用户需求将Nacos部署到生产环境的需求.最新发布的Nacos 1.2.0版本已经支持了服务发现和配置管理的权限控制,保障用户安全上 ...

  6. Python3中的List列表的相关操作

    列表对象内建函数 1. append(obj) 在列表的末尾添加新元素obj.例: >>> a = ['a', 'b', 'c'] >>> a.append('d' ...

  7. WPF自定义控件三:消息提示框

    需求:实现全局消息提示框 一:创建全局Message public class Message { private static readonly Style infoStyle = (Style)A ...

  8. 基于 CODING CD + Nocalhost 在大型应用的 ChatOps 实践

    本文作者:红亚科技 CTO--卢兴民 红亚科技聚焦信息技术发展,为信息技术相关专业提供优质教学服务 背景 ChatOps 最早起源于 GitHub,它以沟通平台为中心,通过与机器人产生对话和交互,使开 ...

  9. Longhorn 企业级云原生分布式容器存储-券(Volume)和节点(Node)

    内容来源于官方 Longhorn 1.1.2 英文技术手册. 系列 Longhorn 是什么? Longhorn 云原生分布式块存储解决方案设计架构和概念 Longhorn 企业级云原生容器存储解决方 ...

  10. 深入理解HTTP请求流程

    以前写过一篇博客,叫做HTTP的报文分析:https://blog.csdn.net/ZripenYe/article/details/119593269但是感觉还是不太深入.不够全面,顶多了解个大概 ...