文章来源于网络收集而来,版权归原创者所有,如有侵权请及时联系!
ES 提案
声明
globalThis
对象:作为顶层对象,指向全局环境下的this
do
表达式:封装块级作用域的操作,返回内部最后执行表达式的值(do{}
)throw
表达式:直接使用throw new Error()
,无需()
或{}
包括!#
命令:指定脚本执行器(写在文件首行)
数值扩展
- 数值分隔符(
_
):使用_
作为千分位分隔符(增加数值的可读性) BigInt()
:创建任何位数的整数(新增的数据类型,使用n
结尾)
对象扩展
- 链判断操作符(
?.
):是否存在对象属性(不存在返回undefined
且不再往下执行) - 空判断操作符(
??
):是否值为undefined
或null
,是则使用默认值
函数扩展
- 函数部分执行:复用函数功能(
?
表示单个参数占位符,...
表示多个参数占位符) - 管道操作符(
|>
):把左边表达式的值传入右边的函数进行求值(f(x) => x |> f
) - 绑定运算符(
::
):函数绑定(左边是对象右边是函数,取代bind
、apply
、call
调用)bind:bar.bind(foo)
=>foo::bar
apply
:bar.apply(foo, arguments)=>
foo::bar(…arguments)`
Proxy
Promise.try()
:不想区分是否同步异步函数,包装函数为实例,使用then()
指定下一步流程,使用catch()
捕获错误
Realm
- 定义:提供沙箱功能,允许隔离代码,防止被隔离的代码拿到全局对象
- 声明:
new Realm().global
Class
- 静态属性:使用
static
定义属性,该属性不会被实例继承,只能通过类来调用 - 私有属性:使用
#
定义属性,该属性只能在类内部访问 - 私有方法:使用
#
定义方法,该方法只能在类内部访问 - 装饰器:使用
@
注释或修改类和类方法
Module
- import():动态导入(返回 Promise)
- 背景:
import
命令被 JS 引擎静态分析,先于模块内的其他语句执行,无法取代require()
的动态加载功能,提案建议引入import()
来代替require()
- 位置:可在任何地方使用
- 区别:
require()
是同步加载,import()
是异步加载 - 场景:按需加载、条件加载、模块路径动态化
- 背景:
- import.meta:返回脚本元信息
Async
- 顶层
Await
:允许在模块的顶层独立使用await
命令(借用await
解决模块异步加载的问题)
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论