返回介绍

ES 提案

发布于 2024-09-07 18:02:44 字数 2341 浏览 0 评论 0 收藏 0

声明

  • globalThis 对象:作为顶层对象,指向全局环境下的 this
  • do 表达式:封装块级作用域的操作,返回内部最后执行表达式的值( do{} )
  • throw 表达式:直接使用 throw new Error() ,无需 (){} 包括
  • !# 命令:指定脚本执行器(写在文件首行)

数值扩展

  • 数值分隔符( _ ):使用 _ 作为千分位分隔符(增加数值的可读性)
  • BigInt() :创建任何位数的整数(新增的数据类型,使用 n 结尾)

对象扩展

  • 链判断操作符( ?. ):是否存在对象属性(不存在返回 undefined 且不再往下执行)
  • 空判断操作符( ?? ):是否值为 undefinednull ,是则使用默认值

函数扩展

  • 函数部分执行:复用函数功能( ? 表示单个参数占位符, ... 表示多个参数占位符)
  • 管道操作符( |> ):把左边表达式的值传入右边的函数进行求值( f(x) => x |> f )
  • 绑定运算符( :: ):函数绑定(左边是对象右边是函数,取代 bindapplycall 调用)
    • 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文