ECMAScript标准:JavaScript的核心
什么是ECMAScript?
ECMAScript(简称ES)是一个由ECMA国际(欧洲计算机制造商协会)制定的脚本语言标准,它为JavaScript、JScript和ActionScript等脚本语言提供了基础规范。JavaScript 可以视为 ECMAScript 的一个实现,而 ECMAScript 本身是关于脚本语言的核心规范,规定了语言的语法、类型、语句、关键字、保留字、操作符、对象等基本构成。
ECMAScript 标准的发展经历了多个版本的迭代,每个版本都引入了新的特性,致力于提高语言的表达能力、性能和开发体验。
ECMAScript的版本演变
ECMAScript 3(ES3)
1999年,ECMAScript 3 版本发布,是 JavaScript 最早的重要版本之一。它稳定了语言的语法,并引入了包括正则表达式、try/catch 异常处理等基础特性,为后来的版本奠定了基础。
ECMAScript 5(ES5)
2009年发布的 ECMAScript 5(ES5)版本进一步规范了 JavaScript,解决了许多开发者在实践中遇到的问题。它引入了严格模式(“use strict”),使得代码执行更加安全;此外,还对数组、对象等进行了改进,增强了JSON支持,添加了Array.prototype.forEach等常用方法,极大地提高了开发效率。
ECMAScript 6(ES6)
2015年发布的 ECMAScript 6(通常被称为 ES2015)是 JavaScript 史上最大的一次更新,新增了大量功能,使得 JavaScript 更加现代化和易用。ES6 的核心特性包括:
-
箭头函数:简洁的函数定义方式。
const sum = (a, b) => a + b;
-
块级作用域:
let
和const
关键字引入块级作用域,使得变量声明更加清晰。let x = 10; const y = 20;
-
模板字符串:支持多行字符串和插值表达式。
let name = "John"; let greeting = `Hello, ${name}!`;
-
Promise:提供一种优雅的方式来处理异步操作。
new Promise((resolve, reject) => {// 异步操作 });
ECMAScript 7(ES7)
虽然 ECMAScript 7(也被称为 ES2016)并没有引入像 ES6 那样的大量新特性,但它也带来了一些重要的更新:
-
Array.prototype.includes:简化数组是否包含某个元素的判断。
let arr = [1, 2, 3]; console.log(arr.includes(2)); // true
-
指数操作符:引入了新的指数运算符
**
,代替了 Math.pow()。let result = 2 ** 3; // 8
ECMAScript 8(ES8)
ECMAScript 8(ES2017)版本进一步优化了语言的功能:
-
Async/Await:让异步代码看起来像同步代码,从而提高代码的可读性和可维护性。
async function fetchData() {let data = await fetch('api/data');console.log(data); }
-
Object.entries:简化了将对象转为数组的操作。
let obj = { a: 1, b: 2 }; console.log(Object.entries(obj)); // [['a', 1], ['b', 2]]
ECMAScript 9(ES9)
ECMAScript 9(ES2018)版本带来了几个小而实用的改进:
-
异步迭代:引入了异步生成器,使得异步操作的迭代更容易实现。
async function* fetchData() {yield await fetch('api/endpoint1');yield await fetch('api/endpoint2'); }
-
Rest/Spread 属性:对象可以使用扩展运算符进行复制或合并。
let obj = { a: 1, b: 2 }; let newObj = { ...obj, c: 3 }; // {a: 1, b: 2, c: 3}
ECMAScript 10(ES10)
ECMAScript 10(ES2019)版本进一步增强了语言特性:
-
Array.prototype.flat 和 Array.prototype.flatMap:简化了对嵌套数组的处理。
let arr = [1, [2, 3], [4, [5, 6]]]; console.log(arr.flat(2)); // [1, 2, 3, 4, 5, 6]
-
Object.fromEntries:将键值对的数组转换为对象。
let entries = [['a', 1], ['b', 2]]; let obj = Object.fromEntries(entries); // {a: 1, b: 2}
ECMAScript 11(ES11)
ECMAScript 11(ES2020)版本则引入了几个重要的新特性:
-
BigInt:支持更大范围的整数操作,解决了 Number 类型的精度问题。
const big = BigInt(1234567890123456789012345678901234567890);
-
Promise.allSettled:确保所有的Promise都完成后再继续。
Promise.allSettled([promise1, promise2]).then(results => { ... });
-
Nullish Coalescing:
??
运算符可用于处理null
和undefined
,而不是其他 falsy 值。let value = null; let result = value ?? 'default'; // 'default'
ECMAScript与JavaScript的关系
虽然 ECMAScript 定义了语言的核心规范,但 JavaScript 是其最著名的实现。浏览器中的 JavaScript 引擎、Node.js 等平台都遵循 ECMAScript 的标准来实现和执行代码。因此,开发者常常使用 JavaScript 来编写符合 ECMAScript 规范的应用程序。
然而,由于不同浏览器和运行环境的差异,不同版本的 ECMAScript 可能会有不同的支持程度。因此,开发者在使用 ECMAScript 新特性时,需要了解目标平台的兼容性情况。
总结
ECMAScript 是推动 JavaScript 语言进化的重要标准,它为开发者提供了更强大、更现代化的工具。随着每个版本的发布,JavaScript 的表达能力和开发体验逐步提高。随着未来更多 ECMAScript 版本的推出,JavaScript 将会越来越适应现代应用程序的开发需求。作为开发者,我们需要时刻关注 ECMAScript 标准的最新动态,以确保我们的代码保持在前沿技术之上。
相关文章:
ECMAScript标准:JavaScript的核心
什么是ECMAScript? ECMAScript(简称ES)是一个由ECMA国际(欧洲计算机制造商协会)制定的脚本语言标准,它为JavaScript、JScript和ActionScript等脚本语言提供了基础规范。JavaScript 可以视为 ECMAScript 的…...
qtc++ qdebug日志生成
本文介绍了将qdebug注册到日志系统,这样qdebug打印的信息将记录在日志文本文件,方便观看程序运行中的历史信息,但是需要注意的是,注册后qdebug的信息将不会打印在qtcreator的输出中,所以作者建议,在开发的时…...
【分布式锁通关指南 10】源码剖析redisson之MultiLock的实现
引言 本期我们将把目光聚焦在 Redisson 中另一个颇具代表性的分布式锁实现——MultiLock。它的核心思想是:一次性对多个独立的 RLock 进行加锁或解锁操作,只有当多个锁都成功加锁时才算真正完成锁的获取,一旦有任何一个失败,整体操…...

DBF Converter:高效转换DBF文件,满足多样化数据处理需求
DBF Converter 是一款功能强大的数据转换工具,专为需要将DBF文件转换为其他格式的用户设计。它支持将DBF文件转换为CSV、Excel、HTML、SQL等多种常见格式,满足用户在不同场景下的数据处理需求。无论是数据迁移、报表生成还是日常数据处理,DBF…...
Java—— 方法引用 : :
方法引用是什么 把已经存在的方法拿过来用,当做函数式接口中抽象方法的方法体 方法引用符 :: 方法引用的条件 1.需要有函数式接口 2.被引用方法必须已经存在 3.被引用方法的形参和返回值需要跟抽象方法保持一致 4.被引用方法的功能要满足当前…...

Jmeter 安装包与界面汉化
Jmeter 安装包: 通过网盘分享的文件:CSDN-apache-jmeter-5.5 链接: https://pan.baidu.com/s/17gK98NxS19oKmkdRhGepBA?pwd1234 提取码: 1234 Jmeter界面汉化:...
6 任务路由与负载均衡
一、任务路由核心机制 1.1 静态路由配置 # celeryconfig.pytask_routes {# 精确匹配任务路径payment.process_order: {queue: priority_payment},# 通配符匹配任务类型report.*: {queue: low_priority_reports},# 正则表达式匹配re.compile(r^video\.(encode|compress)): {q…...

【C++】 —— 笔试刷题day_29
一、排序子序列 题目解析 一个数组的连续子序列,如果这个子序列是非递增或者非递减的;这个连续的子序列就是排序子序列。 现在给定一个数组,然后然我们判断这个子序列可以划分成多少个排序子序列。 例如:1 2 3 2 2 1 可以划分成 …...
Ruby 循环与迭代器
Ruby 循环与迭代器 循环迭代器timesuptostep 循环 。。。。 迭代器 迭代器本质上可以理解为是循环的一种类型 times 3.times do print "Ho! " end begin Ho! Ho! Ho! end上述代码表示我们对当前 block 部分中的内容循环三次。最终,我们打印出了三个…...
力扣-39.组合总和
题目描述 给你一个 无重复元素 的整数数组 candidates 和一个目标整数 target ,找出 candidates 中可以使数字和为目标数 target 的 所有 不同组合 ,并以列表形式返回。你可以按 任意顺序 返回这些组合。 candidates 中的 同一个 数字可以 无限制重复被…...
优化 Element UI 表格样式,隐藏滚动条但保持滚动功能
优化 Element UI 表格样式,隐藏滚动条但保持滚动功能 前言 在基于 Element UI 的项目中,el-table 是非常常用的表格组件。默认情况下,表格的滚动条可能影响页面的美观,特别是在视觉设计上希望更简洁时。本文分享一段优化的 CSS …...
线程池(ThreadPoolExecutor)实现原理和源码细节是Java高并发面试和实战开发的重点
一、线程池核心流程图 ----------------- | 提交任务 | submit/execute -----------------|v ----------------- | 判断核心线程数 | < corePoolSize? -----------------|Yes |Nov v [创建新线程] -----------------| 队列是否满&a…...

MongoTemplate 基础使用帮助手册
前言 MongoDB 是一种流行的 NoSQL 数据库,适合存储大量的非结构化数据。MongoTemplate 是 Spring Data MongoDB 中的一个核心组件,它提供了一组丰富的 API 来与 MongoDB 进行交互。它封装了许多常见的数据库操作,使开发者能够轻松执行 CRUD 操…...

图像处理:预览并绘制图像细节
前言 因为最近在搞毕业论文的事情,要做出一下图像细节对比图,所以我这里写了两个脚本,一个用于框选并同时预览图像放大细节,可显示并返回框选图像的坐标,另外一个是输入框选图像的坐标并将放大的细节放置在图像中&…...

力扣热题——最长相邻不相等子序列 |
题目要求从字符串数组 words 中选出一个最长的子序列,使得该子序列中相邻字符串对应的 groups 数组中的值不同。通过贪心算法,可以高效地解决该问题。具体步骤为:初始化一个结果列表,遍历 words 数组,检查当前字符串的…...
【抽丝剥茧知识讲解】引入mybtis-plus后,mapper实现方式
目录 前言一、传统 Mapper 接口方式二、继承 BaseMapper 的方式三、自定义通用 Mapper 的方式四、使用 MyBatis-Plus 的 ActiveRecord 模式五、使用 MyBatis-Plus 的 IService 接口六、使用建议 前言 mapper文件,作为Mybatis框架中定义SQL语句和映射关系的配置文件&…...

ssti刷刷刷
[NewStarCTF 公开赛赛道]BabySSTI_One 测试发现过滤关键字,但是特殊符号中括号、双引号、点都能用 可以考虑拼接或者编码,这里使用拼接 ?name{{()["__cla"~"ss__"]}}?name{{()["__cla"~"ss__"]["__ba&…...

java+selenum专题(一)
环境搭建部署篇-> 1.简介 java版的selenium,介绍一下java selenium自动化测试。大致和pythonselenium自动化测试差不多。基于java和selenium做自动化测试,因此你必须会搭建基本的开发环境,掌握python基本的语法和一个IDE来进行开发&…...
物体雅克比、空间雅克比、解析雅克比、几何雅克比
在机器人学中,雅可比矩阵是连接广义坐标速度与末端执行器速度的关键工具。根据应用场景和参考系的不同,雅可比矩阵可分为物体雅可比(Body Jacobian)、空间雅可比(Space Jacobian)、解析雅可比(A…...

[逆向工程]DebugView捕获WPS日志?解析未运行WPS时Shell扩展加载的原因与解决方案(二十五)
[逆向工程]DebugView捕获WPS日志?解析未运行WPS时Shell扩展加载的原因与解决方案(二十五) 引言:一个“幽灵”般的日志问题 你是否在使用 DebugView 排查系统问题时,发现日志中频繁出现 WPS 相关模块(如 k…...

ACM模式用Scanner和System.out超时的解决方案和原理
Hi~!这里是奋斗的明志,很荣幸您能阅读我的文章,诚请评论指点,欢迎欢迎 ~~ 🌱🌱个人主页:奋斗的明志 🌱🌱所属专栏:笔试强训 📚本系列文章为个人学…...

Java注解详解:从入门到实战应用篇
1. 引言 Java注解(Annotation)是JDK 5.0引入的一种元数据机制,用于为代码提供附加信息。它广泛应用于框架开发、代码生成、编译检查等领域。本文将从基础到实战,全面解析Java注解的核心概念和使用场景。 2. 注解基础概念 2.1 什…...

QML 属性动画、行为动画与预定义动画
目录 引言相关阅读本文使用的动画属性工程结构示例解析示例1:属性动画应用示例2:行为动画实现示例3:预定义动画 总结工程下载 引言 QML动画系统为界面元素提供了流畅的过渡效果。本文通过三个示例,结合属性动画(PropertyAnimatio…...

window nvidia-smi命令 Failed to initialize NVML: Unknown Error
如果驱动目录下的可以执行,那可能版本原因 "C:\Program Files\NVIDIA Corporation\NVSMI\nvidia-smi"复制"C:\Program Files\NVIDIA Corporation\NVSMI\nvidia-smi.exe"替换 C:\Windows\System32\nvidia-smi.exe 或者 把C:\Windows\System3…...

自学嵌入式 day19-数据结构 链表
二、线性表的链式存储 1.特点: (1)线性表链式存储结构的特点是一组任意的存储单位存储线性表的数据元素,存储单元可以是连续的,也可以不连续。可以被存储在任意内存未被占用的位置上。 (2)所以…...

东芝第3代SiC MOSFET助于降低应用中电源损耗
功率器件是管理和降低各种电子设备电能功耗以及实现碳中和社会的重要元器件。由于与比硅材料相比,碳化硅具有更高的电压和更低的损耗,因此碳化硅(SiC)被广泛视为下一代功率器件的材料。虽然碳化硅功率器件目前主要用于列车逆变器&…...
Vue 2.0学习
个人简介 👨💻个人主页: 魔术师 📖学习方向: 主攻前端方向,正逐渐往全栈发展 🚴个人状态: 研发工程师,现效力于政务服务网事业 🇨🇳人生格言&…...
Mendix 中的XPath 令牌(XPath Tokens)详解
在 Mendix 中,XPath 令牌(XPath Tokens) 是一种特殊的动态参数化查询技术,允许你在 XPath 表达式中使用变量或上下文相关的值,从而实现更灵活的查询逻辑。 1. 什么是 XPath 令牌? XPath 令牌是 Mendix 提…...
Spring Batch学习,和Spring Cloud Stream区别
Spring Batch学习,和Spring Cloud Stream区别 1. 使用Spring Initializr创建项目2. 使用步骤构建作业(Chunk 模式)🧩 场景说明🧰 1. 示例目录结构📄 2. 创建输入文件(users.csv)&…...
【技术原理】Linux 文件时间属性详解:Access、Modify、Change 的区别与联系
在 Linux 系统中,每个文件都有三个核心时间属性:Access Time (atime)、Modify Time (mtime) 和 Change Time (ctime)。它们分别记录文件不同维度的变更信息,以下是具体区别与联系: 一、定义与触发条件 时间属性定义触发条件示例A…...