变量
- 不可重复声明
- 不存在变量提升
- 有暂时性死区
- typeof不再是一个百分之百安全的操作,会在TDZ内报错
- 块级作用域的出现,实际上使得获得广泛应用的匿名立即执行函数表达式(匿名 IIFE)不再必要了。
- ES5 规定,函数只能在顶层作用域和函数作用域之中声明,不能在块级作用域声明,但是ES6允许。
- 全局变量不在挂载在window下
字符串
- ES2020引入了String.prototype.matchAll(),返回的是遍历器,可以for of 遍历取出
-
ES2021 引入了
replaceAll()
方法,可以一次性替换所有匹配。
数值
- Number.isInteger() 是否整型
- ES2020 引入了一种新的数据类型 BigInt(大整数),BigInt 只用来表示整数,没有位数的限制,任何位数的整数都可以精确表示。
函数
- 为了减轻因此产生的不兼容问题
- 允许在块级作用域内声明函数。
- 函数声明类似于var,即会提升到全局作用域或函数作用域的头部。
- 同时,函数声明还会提升到所在的块级作用域的头部。
对象
-
ES2020 在语言标准的层面,引入
globalThis
作为顶层对象 - 如果要将一个已经声明的变量用于解构赋值,使用括号let x;({x} = {x: 1});
- 支持动态属性名,把表达式放在方括号内
-
ES2020 引入了一个新的 Null 判断运算符
??
。它的行为类似||
,但是只有运算符左侧的值为null
或undefined
时,才会返回右侧的值。
数组
- 如果等号的右边不是数组(或者严格地说,不是可遍历的结构),那么解构将会报错。
- Array.of方法用于将一组值,转换为数组。Array.of基本上可以用来替代Array()或new Array()
其他
- 使用<%= ... %>输出 JavaScript 表达式。
-
ES2019 做出了改变,允许try...catch中的
catch
语句省略参数。
网友评论