4 Overview(概述)
本节包含ECMAScript语言的非规范性概述。
ECMAScript是一种面向对象的编程语言,用于在主机环境中执行计算和操纵计算对象。此处定义的ECMAScript并非旨在计算上自给自足;实际上在本规范中没有规定外部数据的输入或计算结果的输出。相反,我们期望ECMAScript程序的计算环境不仅提供本说明书中描述的对象和其他设施,而且还提供某些环境专用对象,这些对象的描述和行为超出了本规范的范围,只是指出它们可以提供可以从ECMAScript程序访问的某些属性和可以从ECMAScript程序调用的某些函数。
ECMAScript最初设计是作为脚本语言使用的,但现在已变成通用编程语言被广泛使用。脚本语言是用于操纵、定制和自动化现有系统设施的编程语言。在这样的系统中,已经通过用户界面使用功能,脚本语言是用于将该功能展示给程序控制的机制。以这种方式,现有系统被赋予提供了对象和设施的主机环境,其完善了脚本语言的能力。脚本语言旨在供专业和非专业程序员使用。
ECMAScript最初被设计为一种Web脚本语言,提供了一种机制来使浏览器中的Web页面活跃起来,并作为基于Web的客户端-服务器体系结构的一部分来执行服务器计算。ECMAScript现在用于为各种主机环境提供核心脚本功能。因此,本文档中指定的核心语言与任何特定的主机环境无关。
ECMAScript的使用已经超越了简单的脚本编写,现在它用于许多不同环境和规模中的所有编程任务。随着ECMAScript使用范围的扩大,它提供的功能和工具也随之扩展。ECMAScript现在是一种功能齐全的通用编程语言。
4.1 Web Scripting(Web脚本)
网络浏览器提供用于客户端侧计算的ECMAScript主机环境,包括例如表示窗口、菜单、弹出窗口、对话框、文本区域、锚、框架、历史、cookie和输入/输出的对象。此外,主机环境提供了将脚本代码附加到诸如焦点改变、页面和图像加载、卸载、错误和中止、选择、表单提交和鼠标动作之类的事件的手段。脚本代码出现在HTML中,显示的页面是用户界面元素以及固定和计算的文本和图像的组合。脚本代码对用户交互起反应,并且不需要主程序。
web服务器为服务器端计算提供不同的主机环境,包括表示请求、客户端和文件的对象;以及锁定和共享数据的机制。通过同时使用浏览器端和服务器端脚本,可以在客户端和服务器之间分配计算,同时为基于Web的应用程序提供定制的用户界面。
每个支持ECMAScript的Web浏览器和服务器都提供自己的主机环境,从而完成ECMAScript执行环境。
4.2 Hosts and Implementations(主机和实现)
为了帮助将ECMAScript集成到主机环境中,本规范推迟了某些工具的定义(例如:abstract operations),全部或部分地引用到本规范之外的来源。编辑上,本规范区分了以下几种延期。
实现是进一步定义附录D中列举的实现或标记为实现定义或近似实现的实现的外部来源。在日常的使用中,一个实现指的是一个具体的工件,比如一个特定的web浏览器。
实现定义的工具是一种将其定义交给外部源而不进行进一步限定的工具。本规范不对特定行为提出任何建议,一致性实现可在本规范提出的约束条件内自由选择任何行为。
一个实现近似工具是一个在推荐理想行为的同时将其定义交给外部来源的工具。虽然一致性实现可以在本规范提出的约束条件内自由选择任何行为,但鼓励它们努力接近理想状态。某些数学运算(如Math.exp
)是实现近似的。
主机是一个外部来源,它进一步定义了附录D中列出的实现,但没有进一步定义其他实现定义或实现近似的实现。在日常使用中,主机是指所有实现的集合,例如所有Web浏览器的集合,它们通过附录D以相同的方式与本规范接口。主机通常是一个外部规范,如WHATWG HTML
(https://html.spec.whatwg.org/ )。换句话说,主机定义的实现通常在外部规范中进一步定义。
host hooks是一个抽象操作,它全部或部分地由外部源定义。所有host hooks必须在[附录D]中列出。主机挂钩必须至少符合以下要求:
- 它必须返回正常完成或抛出完成。
主机定义的实现是指将在附录D中的实现定义交给外部来源而无需进一步限定的实现。不是主机的实现也可以为主机定义的实现提供定义。
主机环境是所有主机定义实现的特定定义选择。主机环境通常包括允许获得输入并提供输出作为主机定义的全局对象属性的对象或函数。
本规范遵循始终使用最具体术语的编辑惯例。例如,如果一个工具是主机定义的,那么它就不应该被称为实现定义的。
主机和实现都可以经由这里定义的语言类型、规范类型、抽象操作、语法产生、内在对象和内在符号与该规范接口。
4.3 ECMAScript Overview(ECMAScript概述)
以下是ECMAScript的非正式概述,即:并不介绍该语言的所有部分。本概述不是标准本身的一部分。
ECMAScript是基于对象的:基本语言和主机设施由对象提供,并且ECMAScript程序是通信对象的集群。在ECMAScript中,对象(object
)是零个或多个属性(properties
)的集合,每个属性都具有确定如何使用每个属性的特性(attributes
)-例如,当属性的"Writable
"特性设置为false
时,执行的ECMAScript代码为该属性分配不同值的任何尝试都会失败。属性是保存其他对象、基础类型(primitive values
)或函数(functions
)的容器。基础类型是以下内置类型之一的成员:Undefined
,Null
,Boolean
,Number
,String
;对象是内置类型Object的成员;而函数是可调用对象(callable object
)。通过属性与对象关联的函数称为方法(method
)。
ECMAScript定义了一组内置对象(built-in objects
),这些对象完善了ECMAScript实体的定义。这些内置对象包括:全局对象(global object);对于语言的运行时语义(runtime semantics)是基础的对象,包括:Object
、Function
、Boolean
、Symbol
和各种Error
对象;表示操作数值的对象包括:Math
、Number
和Date
;文本处理对象:String
和RegExp
;作为值的索引集合的对象,包括:Array
和九种不同类型的类型化数组,这些数组的元素都具有特定的数字数据表示;键控集合,包括:Map
和Set
对象;支持结构化数据的对象,包括:JSON
对象、ArrayBuffer
、SharedArrayBuffer
和DataView
;支持控制抽象的对象,包括:生成器函数
和Promise
对象;以及反射对象,包括:Proxy
和Reflect
。
ECMAScript还定义了一组内置运算符。ECMAScript运算符包括:一元运算符
、乘法运算符
、加法运算符
、按位移位运算符
、关系运算符
、相等运算符
、二元按位运算符
、二元逻辑运算符
、赋值运算符
和逗号运算符
。
模块支持大型ECMAScript程序,模块允许将程序划分为多个语句和声明序列。每个模块显式地标识它所使用的、需要由其他模块提供的声明,以及它的哪些声明可供其他模块使用。
ECMAScript语法有意与Java语法相似。ECMAScript语法很宽松,使其能够充当易于使用的脚本语言。例如,变量不需要声明其类型,类型也不需要与属性相关联,定义的函数不需要在调用它们之前以文本形式出现其声明。