ECMAScript

在这里插入图片描述

ECMAScript 是 JavaScript 语言的国际标准化规范。它定义了 JavaScript 的语法、类型、语句、关键字、保留字、操作符、对象等核心语言特性,为 JavaScript 的实现提供了一致性和标准化的指南。

1.概念介绍

1.1.背景和历史

  • 起源:ECMAScript 起源于 1990 年代中期,当时网景公司的 Brendan Eich 设计了 JavaScript 语言。随后,为了避免不同浏览器对 JavaScript 的不同实现导致的兼容性问题,需要一个标准化的规范。
  • 标准化:1997 年,网景将 JavaScript 提交给了国际标准化组织 ECMA(European Computer Manufacturers Association,欧洲计算机制造商协会),由此产生了 ECMAScript 的第一个版本。

1.2.核心特性

  • 通用性:ECMAScript 是一种通用的脚本语言规范,适用于多种宿主环境,最常见的宿主环境是 Web 浏览器。
  • 语言结构:它包括语法、数据类型、流控制、错误处理、变量声明等编程语言的基本要素。
  • 对象模型:ECMAScript 提供了一个基于原型的对象模型,包括内置对象和函数,以及允许开发者定义自己的对象。

1.3.重要性

  • 标准化:ECMAScript 为 JavaScript 提供了统一的标准,使得不同浏览器和环境中的 JavaScript 实现更加一致。
  • 演化:ECMAScript 持续演化,不断加入新特性和改进,以满足现代 Web 开发的需要。

1.4.与 JavaScript 的关系

  • ECMAScript 是基础:ECMAScript 定义了 JavaScript 的核心语法和功能。可以说,JavaScript 是 ECMAScript 在特定环境(如浏览器或 Node.js)中的实现。
  • 超出 ECMAScript:JavaScript 还包括了超出 ECMAScript 标准的特性,如 Web 浏览器提供的 DOM(文档对象模型)操作功能。

总而言之,ECMAScript 是 JavaScript 语言的基础,提供了其语法和核心功能的标准规范。随着 Web 技术的发展,ECMAScript 继续不断更新和改进,以支持更复杂和强大的 Web 应用程序。通过这种持续的发展和改进,ECMAScript 保证了 JavaScript 作为一种编程语言的可靠性、稳定性和未来的可扩展性。

2.ECMAScript的历史版本

ECMAScript,作为 JavaScript 语言的标准规范,经历了多个版本的更新。每个版本都在语言的功能性、性能和安全性方面引入了改进。以下是ECMAScript的主要版本及其关键特性的简要概述:

2.1.ECMAScript 1 (ES1) - 1997年

  • 初版标准,为 JavaScript 1.1 提供标准化。

2.2.ECMAScript 2 (ES2) - 1998年

  • 主要是对规范文档的编辑改进,与ES1技术上基本相同。

2.3.ECMAScript 3 (ES3) - 1999年

  • 引入了正则表达式。
  • 引入了更强大的错误处理机制(try/catch)。
  • 新的字符串处理功能。
  • 更多的内置函数。

2.4.ECMAScript 4 (ES4) - 未发布

  • 该版本提议包含了大量的语言改进(类、模块等),但因为太过激进而最终被放弃。

2.5.ECMAScript 5 (ES5) - 2009年

  • 添加了严格模式(strict mode)。
  • 更多的数组方法,如 forEachmapfilterreducereduceRight 等。
  • JSON 支持。
  • 增加了对对象属性的更细粒度控制。

2.6.ECMAScript 5.1 - 2011年

  • 对ES5进行了小的修订,以符合ISO国际标准。

2.7.ECMAScript 6 (ES6) / ECMAScript 2015

  • 引入了类和模块。
  • 块作用域变量(let 和 const)。
  • 箭头函数。
  • Promises、模板字符串、默认参数等。
  • 详细内容已在前一条回答中介绍。

2.8.ECMAScript 2016 (ES7)

  • 包含了 Array.prototype.includes 方法。
  • 引入了指数运算符(**)。

2.9.ECMAScript 2017 (ES8)

  • 异步函数(async/await)。
  • Object.values()Object.entries()Object.getOwnPropertyDescriptors()
  • 字符串填充方法(String.prototype.padStart/ String.prototype.padEnd)。

2.10.ECMAScript 2018 (ES9)

  • 异步迭代(Asynchronous Iteration)。
  • Rest/Spread 属性。
  • Promise.prototype.finally。
  • 正则表达式改进(命名捕获组、后行断言、Unicode 属性转义)。

2.11.ECMAScript 2019 (ES10)

  • Array.prototype.{flat,flatMap} 方法。
  • Object.fromEntries() 方法。
  • String.prototype.trimStart / String.prototype.trimEnd
  • 可选的 catch 绑定。
  • Function.prototype.toString 的改进。
  • Symbol.prototype.description

2.12.ECMAScript 2020 (ES11)

  • BigInt - 用于表示大整数。
  • 动态导入(Dynamic Import)。
  • null 合并运算符(??)。
  • 可选链(Optional Chaining)(?.)。
  • Promise.allSettled 方法。
  • String.prototype.matchAll 方法。
  • globalThis - 提供一个标准的方式来获取全局 this 值。

2.13.ECMAScript 2021 (ES12)

  • 字符串替换的改进(String.prototype.replaceAll)。
  • Promise.any 方法。
  • 弱引用(WeakRefs)和最终化注册表(FinalizationRegistry)。
  • 逻辑赋值运算符(逻辑与(&&=)、逻辑或(||=)、逻辑空合并(??=)赋值)。

ECMAScript 的每个新版本都是对语言的增强和改进,不仅使得 JavaScript 更加强大和灵活,也不断适应现代编程的需求和挑战。随着新技术的出现和互联网的发展,我们可以预期 ECMAScript 会继续演进。

3.ECMAScript6

ECMAScript 6(ES6),也称为 ECMAScript 2015,是 JavaScript 语言标准的一个重要版本。它于 2015 年正式发布,并带来了许多更新和新特性,这些特性旨在提高代码的可读性和模块化,同时也为开发者提供了更强大的语言功能。ES6 标志着 JavaScript 作为一种成熟的编程语言的重要里程碑。

以下是 ES6 的一些关键特性和改进:

3.1. 块作用域变量和常量

  • let 关键字:引入了块级作用域的变量。与 var 不同,let 声明的变量只在其声明的块或子块中可用,这对于控制变量的范围非常有用。
  • const 关键字:允许声明值不可变的常量。一旦常量被声明,其值就不能改变。

3.2. 箭头函数

  • 提供了一种更简洁的函数写法。箭头函数不仅语法简洁,而且共享其所在上下文的 this 值,解决了传统函数中 this 的一些常见问题。

3.3. 模板字符串

  • 使用反引号(`)来定义字符串,允许字符串插值和多行字符串,增强了字符串的功能性和可读性。

3.4. 默认参数、剩余参数和展开操作符

  • 默认参数:允许在函数定义中直接指定参数的默认值。
  • 剩余参数(Rest Parameters):使用 ... 语法,允许将一个不定数量的参数表示为一个数组。
  • 展开操作符(Spread Operator):也使用 ... 语法,可以在函数调用、数组字面量或对象字面量中展开数组或对象。

3.5. 解构赋值

  • 允许从数组或对象中提取值,并将它们直接赋值给变量,使得数据访问更加方便。

3.6. 类和继承

  • 引入了 classextends 关键字,提供了一种更接近传统面向对象编程语言的方式来处理对象和继承。

3.7. 模块

  • 支持原生的模块系统,使用 importexport 语句来导入和导出模块成员。

3.8. 新的数据结构

  • 引入了新的数据结构,如 MapSetWeakMapWeakSet,提供了比传统对象和数组更专业的数据存储和访问方式。

3.9. Promise 对象

  • 提供了用于处理异步操作的 Promise 对象。Promise 是一个代表了异步操作最终完成或失败的对象,大大改善了异步编程的模式。

3.10. 迭代器和生成器

  • 迭代器(Iterator):引入了一种新的遍历集合的机制。可用于自定义对象的迭代行为。
  • 生成器(Generator):通过 function*yield 语句,可以定义一个可以暂停执行的函数,非常适合处理复杂的迭代逻辑。

3.11. 新的 API 和对象扩展

  • ES6 还引入了许多新的对象方法和属性,以及对现有标准库的增强,如对字符串、数组和对象的新方法。

3.12. 代理和反射

  • 代理(Proxy):允许创建一个对象的代理,从而可以拦截和自定义对象的基本操作(如属性查找、赋值、枚举、函数调用等)。
  • 反射(Reflect):提供了一套用于执行对象默认操作的方法,与 Proxy 对象协同工作。

3.13. 符号类型

  • 引入了新的原始数据类型 Symbol,可以创建完全唯一的标识符,常用于对象属性的键。

3.14.重要性和影响

ES6 是一个重大的更新,它不仅提高了 JavaScript 的表达能力和开发便利性,而且为现代前端和服务器端 JavaScript 开发奠定了基础。很多现代 JavaScript 框架和库(如 React、Angular 和 Vue)都广泛使用 ES6 的特性。

虽然大多数现代浏览器都支持 ES6,但在一些旧的浏览器和环境中,开发者可能需要使用转译器(如 Babel)将 ES6 代码转换为旧版本的 JavaScript,以确保兼容性。

总的来说,ES6 的推出是 JavaScript 发展中的一次飞跃,它不仅提高了语言的功能性和效率,也使 JavaScript 成为一种更加强大和灵活的编程语言。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/323993.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

腾讯云服务器怎么买?两种购买方式更省钱

腾讯云服务器购买流程很简单,有两种购买方式,直接在官方活动上购买比较划算,在云服务器CVM或轻量应用服务器页面自定义购买价格比较贵,但是自定义购买云服务器CPU内存带宽配置选择范围广,活动上购买只能选择固定的活动…

手机视频转换gif怎么操作?一个小妙招教你手机在线制gif

在现代社会gif动图已经是一种非常流行的图片格式了。可以通过视频转换gif的方式将自己的想法和创意制作成gif动图与好友进行分享斗图。那么,当我们想要在手机上完成视频转换成gif动图是应该怎么办呢?通过使用手机端的gif动图制作(https://www…

Windows系统缺失api-ms-win-crt-runtime-l1-1-0.dll的修复方法

“在Windows操作系统环境下,用户经常遇到丢失api-ms-win-crt-runtime-l1-1-0.dll文件的问题,这一现象引发了广泛的关注与困扰。该dll文件作为Microsoft Visual C Redistributable Package的重要组成部分,对于系统内许多应用程序的正常运行起着…

Github项目推荐-clone-voice

项目地址 GitHub - jianchang512/clone-voice 项目简述 一个声音ai工具。基于python编写。作用是音色复用。下面是官方说明:“这是一个声音克隆工具,可使用任何人类音色,将一段文字合成为使用该音色说话的声音,或者将一个声音使…

SpringCloud Nacos服务注册中心和配置中心

一、什么是Nacos? 官方介绍是这样的: Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集,帮助您实现动态服务发现、服务配置管理、服务及流量管理。 Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。 Na…

matlab|基于VMD-SSA-LSTM的多维时序光伏功率预测

目录 1 主要内容 变分模态分解(VMD) 麻雀搜索算法SSA 长短期记忆网络LSTM 2 部分代码 3 程序结果 4 下载链接 1 主要内容 之前分享了预测的程序基于LSTM的负荷和可再生能源出力预测【核心部分复现】,该程序预测效果比较好,并且结构比较清晰&#…

记一个有关 Vuetify 组件遇到的一些问题

Vuetify 官网地址 所有Vuetify 组件 — Vuetify 1、Combobox使用对象数组 Combobox 组合框 — Vuetify items数据使用对象数组时&#xff0c;默认选中的是整个对象&#xff0c;要对数据进行处理 <v-comboboxv-model"defaultInfo.variableKey":rules"rules…

Zabbix的多场景应用

1 zabbix更多用法 1.1 自动注册方式 zabbix自动发现 zabbix server服务端主动发现zappix agent客户端 1&#xff09;在【配置】-【自动发现】创建 发现规则&#xff0c;设置 IP范围 检查的键值system.uname 2&#xff09;在【配置】-【动作】-【发现动作】创建 动作&#x…

【2024】OAK智能深度相机校准教程

编辑&#xff1a;OAK中国 首发&#xff1a;oakchina.cn 喜欢的话&#xff0c;请多多&#x1f44d;⭐️✍ 内容可能会不定期更新&#xff0c;官网内容都是最新的&#xff0c;请查看首发地址链接。 ▌前言 Hello&#xff0c;大家好&#xff0c;这里是OAK中国&#xff0c;我是Ash…

深入理解 go chan

go 里面&#xff0c;在实际程序运行的过程中&#xff0c;往往会有很多协程在执行&#xff0c;通过启动多个协程的方式&#xff0c;我们可以更高效地利用系统资源。 而不同协程之间往往需要进行通信&#xff0c;不同于以往多线程程序的那种通信方式&#xff0c;在 go 里面是通过…

MySQL的单表查询

单表查询的素材&#xff1a; 一、单表查询 素材&#xff1a; 表名&#xff1a;worker-- 表中字段均为中文&#xff0c;比如 部门号 工资 职工号 参加工作 等 CREATE TABLE worker ( 部门号 int(11) NOT NULL, 职工号 int(11) NOT NULL, 工作时间 date NOT NULL, 工资 floa…

全网最细RocketMQ源码四:消息存储

看完上一章之后&#xff0c;有没有很好奇&#xff0c;生产者发送完消息之后&#xff0c;server是如何存储&#xff0c;这一章节就来学习 入口 SendMessageProcessor.processRequest private CompletableFuture<RemotingCommand> asyncSendMessage(ChannelHandlerCont…

tensorflow报错: DNN library is no found

错误描述 如上图在执行程序的时候&#xff0c;会出现 DNN library is no found 的报错 解决办法 这个错误基本上说明你安装的 cudnn有问题&#xff0c;或者没有安装这个工具。 首先检测一下你是否安装了 cudnn 进入CUDA_HOME下&#xff0c;也就是进入你的cuda的驱动的安装目…

Excel地址

解题思路&#xff1a; 根据题中歪歪和笨笨的话可以有两种解法。 1.输入的数为多大&#xff0c;则循环1多少次&#xff0c;当值为27时就要进行进位操作。这时要分情况讨论。 当集合中元素为一个时&#xff0c;如26&#xff0c;则需要变为1 1&#xff0c;集合元素个数加一。 当…

linux docker安装 rustdesk

这里写自定义目录标题 1&#xff1a;软件介绍&#xff1a;2&#xff1a;安装1. 服务器端2. 客户端 3&#xff1a;配置5&#xff1a;其他1:rustdesk 官方Docker Compose 1&#xff1a;软件介绍&#xff1a; 名称作用官网项目地址rustdesk实现多端互控https://rustdesk.com/inde…

L1-025 正整数A+B(Java)

题的目标很简单&#xff0c;就是求两个正整数A和B的和&#xff0c;其中A和B都在区间[1,1000]。稍微有点麻烦的是&#xff0c;输入并不保证是两个正整数。 输入格式&#xff1a; 输入在一行给出A和B&#xff0c;其间以空格分开。问题是A和B不一定是满足要求的正整数&#xff0…

Mindspore 公开课 - GPT

GPT Task 在模型 finetune 中&#xff0c;需要根据不同的下游任务来处理输入&#xff0c;主要的下游任务可分为以下四类&#xff1a; 分类&#xff08;Classification&#xff09;&#xff1a;给定一个输入文本&#xff0c;将其分为若干类别中的一类&#xff0c;如情感分类、…

嵌入式软件工程师面试题——2025校招社招通用(十八)

说明&#xff1a; 面试群&#xff0c;群号&#xff1a; 228447240面试题来源于网络书籍&#xff0c;公司题目以及博主原创或修改&#xff08;题目大部分来源于各种公司&#xff09;&#xff1b;文中很多题目&#xff0c;或许大家直接编译器写完&#xff0c;1分钟就出结果了。但…

pandas列与列之间的计算

1.简单计算 &#xff08;1&#xff09;首先导入pandas模块并读取数据 import pandas as pd adress"D:/pandas练习文件/计算.xlsx" datapd.read_excel(adress) &#xff08;2&#xff09; 计算销售额 销售额售价*销售数量 data["销售额"]data["售价&…

Unet系列网络解析

Unet UNet最早发表在2015的MICCAI上&#xff0c;到2020年中旬的引用量已经超过了9700多次&#xff0c;估计现在都过万了&#xff0c;从这方面看足以见得其影响力。当然&#xff0c;UNet这个基本的网络结构有太多的改进型&#xff0c;应用范围已经远远超出了医学图像的范畴。我…
最新文章