ECMAScript 是什么?
ECMAScript 是什么
简介
- Ecma 标准定义了 ECMAScript 语言
- ECMAScript 基于多种原始技术,最著名的是 JavaScript (Netscape) 和 JScript (Microsoft)
- ECMAScript 以嵌入 Web 浏览器中的语言而闻名,但也被广泛用于服务器和嵌入式应用程序
版本迭代
第一版于 1997 年 6 月由 Ecma 大会通过
第二版较之第一版更改本质上是编辑性
第三版引入
- 强大的正则表达式
- 更好的字符串处理
- 新的控制语句
- try/catch 异常处理
- 更严格的错误定义
- 数字输出的格式
- 对未来语言增长预期的微小变化
此时,它已成为几乎所有 Web 浏览器都支持的编程语言
第四版没有正式发布,但其中的一些内容被纳入了第六版
第五版编纂了在浏览器实现中变得普遍的语言规范的实际解释,并增加了对自第三版发布以来出现的新功能的支持
- 访问器属性
- 对象的反射创建和检查
- 属性特性的程序控制
- 额外的数组操作函数
- 对 JSON 对象编码格式的支持
- 提供增强的错误检查和程序安全性的严格模式
第六版的重点,于 2015 年 6 月由大会通过
自 1999 年第三版出版以来,在此之前进行了大量的实验和语言增强设计工作。从非常真实的意义上说,第六版的完成是十五年努力的结晶
- 此版本的目标包括为大型应用程序、库创建以及使用 ECMAScript 作为其他语言的编译目标提供更好的支持
- 语法改进模块、类声明、词法块范围、迭代器和生成器、异步编程的承诺、解构模式、适当的尾调用
- 扩展了 ECMAScript 内置库以支持额外的数据抽象,包括映射、集合、和二进制数值数组,以及对字符串和正则表达式中的 Unicode 增补字符的额外支持
第六版为常规的、渐进的语言和库增强功能奠定了基础
ECMAScript 2016
- 提交了数百个拉取请求和问题,代表了数以千计的错误修复、编辑修复和其他改进
- ES2016 还包括对新指数运算符的支持,并为 Array.prototype 添加了一个新方法 includes
核心目的是对 ES2015 版本大更的补正
ECMAScript 2017
- 引入了异步函数、共享内存、原子一致性
- 以及较小的语言和库增强功能、错误修复和编辑更新
- Object 上的新静态方法:Object.values、Object.entries、Object.getOwnPropertyDescriptors
目的在于改善异步编程体验
ECMAScript 2018 通过 AsyncIterator 协议和异步生成器引入了对异步迭代的支持
- 四个新的正则表达式功能:dotAll 标志、命名捕获组、Unicode 属性转义、后视断言
- 最后对象新属性:rest、spread
ECMAScript 2019
引入了一些新的内置函数
- Array.prototype 上的 flat 和 flatMap 用于压平数组
- Object.fromEntries 用于将 Object.entries 的返回值直接转换为新的 Object
- String.prototype 上的 trimStart 和 trimEnd 作为广泛实现但非标准的 String.prototype.trimLeft 和 trimRight 内置函数的更好命名替代
更新的语法包括
- 可选的catch绑定参数
- 允许字符串文本中的 U+2028 (LINE SEPARATOR) 和 U+2029 (PARAGRAPH SEPARATOR) 与 JSON 对齐
其他更新包括要求 Array.prototype.sort 是一种稳定的排序,要求 JSON.stringify 无论输入如何都返回格式良好的 UTF-8,并通过要求返回相应的原始源文本或标准占位符来澄清 Function.prototype.toString
ECMAScript 2020 第十一版
引入了
- 字符串的 matchAll 方法,为全局正则表达式生成的所有匹配对象生成迭代器
- import(): 一种使用动态说明符异步导入模块的语法
- BigInt: 一个用于处理任意精度整数的新数字原语
- Promise.allSettled: 一个不短路的新 Promise 组合子
- globalThis: 获取全局 this 值的通用方法
- 模块专用导出语法(ns 是别名):
export * as ns from 'module'
- import.meta,模块中可用的主机填充对象,可能包含模块的上下文信息
- 添加两个新的语法特性以改进对“零”值(null 或 undefined)的处理:零合并,一个值选择运算符
- 可选的链接,一种属性访问和函数调用运算符,如果要访问/调用的值为空,则会短路
ECMAScript 2021
引入
- 字符串的replaceAll方法
- Promise.any: 一个 Promise 组合子,当输入值满足时短路
- AggregateError: 一种新的错误类型,一次表示多个错误
- 逻辑赋值运算符:
??=
,&&=
,||=
- WeakRef: 用于引用目标对象而不将其保留在垃圾收集中
- FinalizationRegistry: 用于管理在垃圾收集目标对象时执行的清理操作的注册和注销
- 数字文本的分隔符 (1_000)
- Array.prototype.sort: 排序更加精确,减少了导致实现定义排序顺序的案例数量
ECMAScript 2022,第13版
引入
- await,允许在模块的顶级使用关键字
- 新的类元素:公共和私有实例字段、公共和私有静态字段、私有实例方法和访问器、私有静态方法和访问程序
- 类内的静态块,以执行每个类的评估初始化
- 语法中的
#x in obj
,用于测试对象上是否存在私有字段 - 正则表达式通过
/d
标志匹配索引,该标志为匹配的子字符串提供开始和结束索引 - Error 对象上的 cause 属性,可用于记录错误中的因果链
- 字符串、数组、TypedArrays 的 at 方法,允许相对索引
- Object.hasOwn: 这是 Object.prototype.hasOwnProperty 的一个方便替代品
ECMAScript 是什么?的更多相关文章
- ECMAScript 6 扫盲
ECMAScript 6 目前基本成为业界标准,它的普及速度比 ES5 要快很多,主要原因是现代浏览器对 ES6 的支持相当迅速,尤其是 Chrome 和 Firefox 浏览器,已经支持 ES6 中 ...
- ECMAScript 5
2009年12月,ECMAScript 5.02011年6月,ECMAscript 5.1版发布2015年6月,ECMAScript 6正式通过,成为国际标准ES6第一个版本 ES2015,发布于20 ...
- ECMAScript 6入门
预计在2014年底,ECMAScript 6将会正式发布,他的草案在13年3月份被冻结,后续提出新特性将会移至ECMASript 7中.目前还没有哪款浏览器实现了ES6的全部内容,兼容性最强的一款要数 ...
- Javascript与ECMAScript
我们经常习惯性认为Javascript就是ECMAScript,但其实不是这样的. ECMAScript是一种脚本在语法和语义上的标准. 主要包括:语法.类型.语句.关键字.保留字.操作符.对象. 它 ...
- ECMAScript 6 开篇准备
1前言 该系列文章均为学习阮一峰老师<ECMAScript 6 入门>一书的学习笔记.原著:http://es6.ruanyifeng.com/ 各大浏览器的最新版本,对ES6的支持可以查 ...
- ECMAScript 5中属性的特性值
这是<JavaScript高级程序设计(第三版)>第六章相关内容的总结. ECMAScript中有两种属性:数据属性和访问器属性.每种属性都有四个特性值. 数据属性的四个特性值: [[Co ...
- SharePoint 2013 Excel Services ECMAScript 示例之明日限行
前言:最近遇到一个“明日限行”的功能,北京的交通啊,这个不在今天讨论范围内,暂不吐槽,想想代码开发,还要写WebPart部署,很麻烦,而且部署服务器,需要领导审批,想绕过这个麻烦事儿,就想到客户端了, ...
- JavaScript异步编程(1)- ECMAScript 6的Promise对象
JavaScript的Callback机制深入人心.而ECMAScript的世界同样充斥的各种异步操作(异步IO.setTimeout等).异步和Callback的搭载很容易就衍生"回调金字 ...
- EcmaScript相关文档
ecmascript5.1中文文档 ECMAScript 6入门 JavaScript 标准参考教程 ECMAScript 5.1简介 ES5中新增的Array方法详细说明 firefox社区java ...
- ECMAScript 6 Features 中文版
ECMAScript 6 Features 中文版 如词不达意,欢迎提 PR & issue 采用中英混排的方式进行译制,如不解请查看对应原文 本文档将与原作者的 文档 保持同步更新,欢迎关注 ...
随机推荐
- 卷爆短剧出海:五大关键,由AIGC重构
短剧高温下,谈谈AIGC的助攻路线. 短剧,一个席卷全球的高温赛道. 以往只是踏着霸总题材,如今,内容循着精品化.IP化的自然发展风向,给内容.制作.平台等产业全链都带来新机,也让短剧消费走向文化深处 ...
- 排查Python卡慢神器
如果遇到Python正在运行中的进程卡住,找不到原因.可以试试以下工具方法, 对于python就像jstack对于java一样. 法一 使用pystack-debugger 安装方式如下: yum i ...
- ModelScope初体验
使用环境:windows 11 前置条件:已安装 anaconda 参考文档:环境安装 step1:新建一个 conda 环境,命名为 modelscope conda create -n model ...
- AutoLayout + UILabel布局
一.内容决定宽度 实现AutoLayout模式下面,UILabel跟随内容大小自动扩张,在storyboard中拖拽一个UILabel,将其居中,然后定时改变内容,不需要特别设置,那么UILabel宽 ...
- ra6m3之adc踩坑日志(基于rt-thread )
问题描述 1.已经用fsp工具正确配置Pins 2.已经用fsp工具正确配置Stacks 3.问题是根本没有在RT-Thread Studio看到HAL相关的ADC代码,也没看到Settings里边的 ...
- Qt开发技术:Q3D图表开发笔记(四):Q3DSurface三维曲面图颜色样式详解、Demo以及代码详解
前言 qt提供了q3d进行三维开发,虽然这个框架没有得到大量运用也不是那么成功,性能上也有很大的欠缺,但是普通的点到为止的应用展示还是可以的. 其中就包括华丽绚烂的三维图表,数据量不大的时候是可 ...
- react组件通信 父组件与子组件互相通信
父组件将自己的状态传递给子组件,子组件当做属性来接收,当父组件更改自己状态的时候,子组件接收到的属性就会发生改变 父组件利用ref对子组件做标记,通过调用子组件的方法以更改子组件的状态,也可以调用子组 ...
- C#.NET与JAVA互通之AES加密解密V2024
C#.NET与JAVA互通之AES加密解密V2024 视频: 注意点: 1. KEY 和 IV 从字符串转byte数组时,双方要约定好编码,一般是UTF8. 2.明文从字符串转byte数组时,双方要约 ...
- Semantic Kernel入门系列:通过依赖注入管理对象和插件
前言 本章讲一下在Semantic Kernel中使用DependencyInject(依赖注入),在之前的章节我们都是通过手动创建Kernel对象来完成框架的初始化工作,今天我们用依赖注入的方式来实 ...
- 像 Google SRE 一样 OnCall
在 Google SRE 的著作<Google运维解密>(原作名:Site Reliability Engineering: How Google Runs Production Syst ...