ECMAScript 与 JavaScript:主要区别与实例说明

2024-09-04 01:44

本文主要是介绍ECMAScript 与 JavaScript:主要区别与实例说明,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

 定义与起源

标准与实现

版本更新

ECMAScript 版本更新比对表

JavaScript 实现版本更新比对表

实现差异

示例说明

总结


引言

      随着互联网技术的发展,JavaScript 已经成为当今最流行和广泛应用的编程语言之一。不仅用于增强网页的动态交互性,还广泛应用于服务器端编程、移动应用开发以及桌面应用程序等领域。对于许多开发者而言,“JavaScript”和“ECMAScript”这两个术语常常混淆不清。实际上,这两者之间有着明确的区别和联系。

      ECMAScript 是一种脚本语言的国际标准,由 ECMA International 组织制定和维护。这一标准为脚本语言定义了通用的语法和语义规则,确保了不同实现之间的兼容性和互操作性。JavaScript,则是由 Netscape Communications Corporation 在1995年首次推出的编程语言,是 ECMAScript 标准的第一个实现,并且随着时间的推移,成为了这一标准的主要参考实现。

 定义与起源
特性ECMAScriptJavaScript
定义一种脚本语言的标准规范一种广泛使用的脚本语言,由Netscape开发
起源1996年由欧洲计算机制造商协会(ECMA International)发布1995年由Netscape Communications Corporation开发
目标作为标准化的脚本语言规范最初是为了增加网页的交互性而设计的
标准化是,由ECMA International维护实现了ECMAScript标准
版本控制按照年份定期更新,如ES6 (2015), ES2016, ES2017等遵循ECMAScript的版本更新
实现包括但不限于SpiderMonkey, V8, Chakra等主要实现包括SpiderMonkey, V8, Chakra等
  • ECMAScript (ES):ECMAScript 是一种脚本语言的标准规范,由 Ecma International 制定并维护。定义了一种通用的编程语言的语法和语义规则,旨在提供一个统一的基础,以便不同的实现能够遵循相同的规范。ECMAScript 的设计初衷是为了提供一个开放、非专有的脚本语言标准。

  • JavaScript (JS):JavaScript 是一种广泛使用的脚本语言,最初由 Netscape 公司的 Brendan Eich 设计,并首次实现在 Netscape Navigator 浏览器中。随着时间的发展,JavaScript 成为了 Web 开发中最核心的技术之一,并且已经超出了仅仅是一个浏览器脚本语言的范畴,它可以用于服务器端编程(如 Node.js)、移动应用开发(如 React Native)以及桌面应用程序开发(如 Electron)。

标准与实现
特性ECMAScript (标准)JavaScript (实现)
标准化过程通过TC39委员会进行,每年发布新版本各个引擎实现者遵循ECMAScript规范,同时也可以有自己的扩展
语法与语义定义了基础语法,如变量声明、函数、对象等必须符合ECMAScript的语法,但可以有特定环境下的特性,如DOM操作
核心APIs标准定义了一些核心对象和方法,如Array, String, Math等实现必须支持标准APIs,还可以包含额外的APIs,例如Web API
兼容性各版本之间保持向后兼容性不同版本的JavaScript引擎可能有不同的兼容性处理方式
实现细节不涉及具体实现细节,只定义规范引擎如何编译、优化代码,内存管理等都是实现细节
运行环境可以在任何支持ECMAScript规范的环境中运行主要在浏览器中执行,也可以在Node.js这样的服务器端环境中运行
工具与框架支持无直接关系,工具和框架通常基于最新的ECMAScript规范工具和框架会根据JavaScript的特性来设计,例如Babel转换现代JS到旧版本
性能优化不涉及具体的性能优化措施引擎会进行各种优化,如即时编译(JIT)、垃圾回收等
跨平台性由于是规范,理论上可以在任何平台上实现JavaScript已经成为一种跨平台语言,可以在多种操作系统上运行
  • ECMAScript:ECMAScript 规定了语言的基本元素,包括数据类型、语法结构、内置对象等。每年都会发布新的版本(例如 ES6/ES2015、ES7/ES2016 等),以引入新的语言特性,增强其功能。虽然 ECMAScript 是一个标准,但它并不规定实现细节。

  • JavaScript:JavaScript 是 ECMAScript 标准的一个实现。尽管大多数现代浏览器和 JavaScript 运行环境(如 Node.js)都遵循 ECMAScript 标准,但它们也会根据自身的需求添加额外的 API 和功能。例如,Web 浏览器中的 JavaScript 包含了许多与 DOM(文档对象模型)和 BOM(浏览器对象模型)相关的 API,这些都不是 ECMAScript 标准的一部分。

版本更新
ECMAScript 版本更新比对表
版本发布时间主要特性与改进
ES11997年初始版本,定义了基础语法,如变量声明、基本数据类型等。
ES21998年小幅改进,如允许函数名重复。
ES31999年增加了更多的内置对象,如MathDate
ES52009年引入了严格模式(strict mode),增强了数组方法,例如Array.prototype.forEach()
ES6 / ES20152015年块级作用域变量(letconst),箭头函数,模板字符串,类,模块支持等。
ES7 / ES20162016年Array.prototype.includes(),指数操作符(**),尾调用优化(实验性)。
ES8 / ES20172017年异步函数(async/await),共享数组缓冲区(SharedArrayBuffer),原子操作符等。
ES9 / ES20182018年异步迭代器,Object.values()Object.entries()String.prototype.padStart()padEnd()等。
ES10 / ES20192019年扁平化数组(Array.prototype.flat()),可选捕捉(optional catching),Symbol.prototype.description等。
ES11 / ES20202020年大整数类型(BigInt),String.prototype.matchAll()Promise.allSettled()等。
ES12 / ES20212021年引入了逻辑赋值运算符,Promise.any等。
ES13 / ES20222022年顶层await,类字段的初始化,Temporal API等。
ES14 / ES20232023年Error cause提案,ArrayBuffer.isView(),私有类方法等。
JavaScript 实现版本更新比对表
版本发布时间主要特性与改进
Netscape 2.01995年最初的JavaScript版本。
Netscape 3.01996年改进了性能,增加了DOM支持。
Mozilla Firefox 1.02004年提供了更好的ECMAScript兼容性,增强了安全性。
Chrome 1.02008年V8引擎的引入,提高了JavaScript执行速度。
Safari 42009年Nitro JavaScript引擎,增强了JavaScript性能。
Edge 792020年基于Chromium内核,支持最新的ECMAScript特性。
Firefox 802020年继续提高JavaScript执行效率,增强WebAssembly支持。
Chrome 852020年进一步优化V8引擎性能,支持更多ES2020特性。
Safari 142020年提升了JavaScript执行速度,增强了Web开发工具。
Edge 882021年改进了JavaScript的开发工具,增强了对现代Web标准的支持。
Chrome 902021年实验性支持新的ES2021特性。
Firefox 902021年增强了WebAssembly功能,提升了JavaScript性能。
Chrome 1002022年全面支持ES2022特性,继续优化JavaScript执行效率。
  • ECMAScript:随着每一年的新版本发布,ECMAScript 不断引入新特性,如箭头函数、类、模块系统等。这些新特性需要在 JavaScript 实现中逐步支持。

  • JavaScript:JavaScript 实现通常会跟进 ECMAScript 的最新版本,但并非所有新特性都会立即被所有 JavaScript 运行环境支持。开发者需要关注不同环境的兼容性问题。

实现差异
  • 跨平台性:尽管 JavaScript 遵循 ECMAScript 标准,但不同的 JavaScript 运行环境(如浏览器、Node.js)可能会有不同的实现细节。这意味着某些特定于某个环境的功能可能无法在其他环境中使用。

  • API 差异:例如,Node.js 中的 JavaScript 实现提供了处理文件系统、网络请求等功能的 API,这些功能在浏览器环境中并不存在。

示例说明

假设要使用一个新的 ECMAScript 特性——异步迭代器(Async Iterators)。这个特性允许在异步代码中使用 for-await-of 循环来处理异步可迭代对象。

ECMAScript 定义: ECMAScript 规范定义了异步迭代器的语法和行为,包括 Symbol.asyncIterator 的使用,以及如何实现 next() 方法返回 Promise 对象。

JavaScript 实现: 在浏览器环境中,异步迭代器的支持取决于浏览器版本。较新的浏览器(如 Chrome、Firefox)通常会支持最新的 ECMAScript 特性。而在 Node.js 中,异步迭代器也是可用的,但开发者需要注意确保使用的是支持该特性的 Node.js 版本。

// 示例代码:异步迭代器
async function* asyncNumbers() {for (let i = 0; i < 10; i++) {await new Promise(resolve => setTimeout(resolve, 1000)); // 模拟异步延迟yield i;}
}(async () => {for await (const num of asyncNumbers()) {console.log(num);}
})();

上述定义异步生成器函数 asyncNumbers(),会异步地产生一系列数字。通过 for-await-of 循环,可以依次获取这些数字。在支持异步迭代器的 JavaScript 环境中可以正常运行,但在不支持该特性的环境中则会抛出错误。

总结

ECMAScript 提供了语言层面的标准,而 JavaScript 则是基于这一标准的具体实现,并且可以根据不同的环境和需求进行扩展。

这篇关于ECMAScript 与 JavaScript:主要区别与实例说明的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1134641

相关文章

JVM 的类初始化机制

前言 当你在 Java 程序中new对象时,有没有考虑过 JVM 是如何把静态的字节码(byte code)转化为运行时对象的呢,这个问题看似简单,但清楚的同学相信也不会太多,这篇文章首先介绍 JVM 类初始化的机制,然后给出几个易出错的实例来分析,帮助大家更好理解这个知识点。 JVM 将字节码转化为运行时对象分为三个阶段,分别是:loading 、Linking、initialization

Spring Security 基于表达式的权限控制

前言 spring security 3.0已经可以使用spring el表达式来控制授权,允许在表达式中使用复杂的布尔逻辑来控制访问的权限。 常见的表达式 Spring Security可用表达式对象的基类是SecurityExpressionRoot。 表达式描述hasRole([role])用户拥有制定的角色时返回true (Spring security默认会带有ROLE_前缀),去

浅析Spring Security认证过程

类图 为了方便理解Spring Security认证流程,特意画了如下的类图,包含相关的核心认证类 概述 核心验证器 AuthenticationManager 该对象提供了认证方法的入口,接收一个Authentiaton对象作为参数; public interface AuthenticationManager {Authentication authenticate(Authenti

Spring Security--Architecture Overview

1 核心组件 这一节主要介绍一些在Spring Security中常见且核心的Java类,它们之间的依赖,构建起了整个框架。想要理解整个架构,最起码得对这些类眼熟。 1.1 SecurityContextHolder SecurityContextHolder用于存储安全上下文(security context)的信息。当前操作的用户是谁,该用户是否已经被认证,他拥有哪些角色权限…这些都被保

Spring Security基于数据库验证流程详解

Spring Security 校验流程图 相关解释说明(认真看哦) AbstractAuthenticationProcessingFilter 抽象类 /*** 调用 #requiresAuthentication(HttpServletRequest, HttpServletResponse) 决定是否需要进行验证操作。* 如果需要验证,则会调用 #attemptAuthentica

Spring Security 从入门到进阶系列教程

Spring Security 入门系列 《保护 Web 应用的安全》 《Spring-Security-入门(一):登录与退出》 《Spring-Security-入门(二):基于数据库验证》 《Spring-Security-入门(三):密码加密》 《Spring-Security-入门(四):自定义-Filter》 《Spring-Security-入门(五):在 Sprin

Java架构师知识体认识

源码分析 常用设计模式 Proxy代理模式Factory工厂模式Singleton单例模式Delegate委派模式Strategy策略模式Prototype原型模式Template模板模式 Spring5 beans 接口实例化代理Bean操作 Context Ioc容器设计原理及高级特性Aop设计原理Factorybean与Beanfactory Transaction 声明式事物

Zookeeper安装和配置说明

一、Zookeeper的搭建方式 Zookeeper安装方式有三种,单机模式和集群模式以及伪集群模式。 ■ 单机模式:Zookeeper只运行在一台服务器上,适合测试环境; ■ 伪集群模式:就是在一台物理机上运行多个Zookeeper 实例; ■ 集群模式:Zookeeper运行于一个集群上,适合生产环境,这个计算机集群被称为一个“集合体”(ensemble) Zookeeper通过复制来实现

Java进阶13讲__第12讲_1/2

多线程、线程池 1.  线程概念 1.1  什么是线程 1.2  线程的好处 2.   创建线程的三种方式 注意事项 2.1  继承Thread类 2.1.1 认识  2.1.2  编码实现  package cn.hdc.oop10.Thread;import org.slf4j.Logger;import org.slf4j.LoggerFactory

便携式气象仪器的主要特点

TH-BQX9】便携式气象仪器,也称为便携式气象仪或便携式自动气象站,是一款高度集成、低功耗、可快速安装、便于野外监测使用的高精度自动气象观测设备。以下是关于便携式气象仪器的详细介绍:   主要特点   高精度与多功能:便携式气象仪器能够采集多种气象参数,包括但不限于风速、风向、温度、湿度、气压等,部分高级型号还能监测雨量和辐射等。数据采集与存储:配备微电脑气象数据采集仪,具有实时时钟、数据存