ECMAScript 2015官方文档翻译(二)

声明:
  1.翻译文章旨在辅助理解,没有讲究语言方面的信达雅,英文原版传送门:http://www.ecma-international.org/ecma-262/6.0/
  2.有的地方翻译的很拗口,因为官方文档用词句法都很严谨,本人也是菜鸟一个不敢随意添加拙见,如果觉得读不通可以移步英文原版,自己读应该会有不一样的感受。

ECMAScript 2015 语言规范

正文:
     

1 Scope(范围)

  
  本标准定义了ECMAScript 2015通用编程语言。
  

2 Conformance(一致性)

  
  一个符合ECMAScript标准的实现必须提供和支持所有该规范中描述的类型、值,对象,性质,功能,程序语法和语义。
  符合标准的ECMAScript实现必须解释符合Unicode标准,5.1.0或更高版本和ISO/IEC 10646的源文本输入。如果采用ISO/IEC 10646 - 1子集没有特别规定,则默认是Unicode集,10646集。
  符合标准的ECMAScript的实现提供了一个应用程序编程接口,这个接口支持需要适应不同人类语言使用的语言和文化习俗的程序,各国必须实现与该规范兼容的最新版本的ecma - 402版本定义的接口。
  符合标准的ECMAScript的实现可以提供除本规范描述以外的附加类型,值,对象,属性和功能。特别地,符合ECMAScript的实现可以提供本规范中未描述的属性以及用于这些属性和本规范中描述的对象的值。
  符合标准的ECMAScript的实现可能支持本规范中未描述的程序和正则表达式语法。特别地,符合ECMAScript的实现可能支持使用本规范第11.6.2.2条列出的“未来保留字”的程序语法。
  符合标准的ECMAScript的实现不得实施第16.1节中被列为禁止扩展的任何扩展。
  

3 Normative references(规范性引用)

  
  以下引用的文档对于本文档的应用是必不可少的。对于注日期的引用文件,只有引用的版本适用。对于未注明日期的引用文件,引用文件的最新版本(包括任何修订)适用。
  ISO / IEC 10646:2003:信息技术 - 通用多字节编码字符集(UCS)加修正案1:2005,修正2:2006,修订3:2008和修订4:2008,以及附加的修订和更正或后继
  ECMA-402,ECMAScript 2015国际化API规范。
http://www.ecma-international.org/publications/standards/Ecma-402.htm
  ECMA-404,JSON数据交换格式。
http://www.ecma-international.org/publications/standards/Ecma-404.htm
  

4 Overview(概述)

  
  本节包含ECMAScript语言的非规范概述。
  ECMAScript是一种面向对象的编程语言,用于在主机环境中执行计算和操纵计算对象。这里定义的ECMAScript不是计算自给自足的; 实际上,在本规范中没有规定外部数据的输入或计算结果的输出。相反,预期ECMAScript程序的计算环境不仅将提供本规范中描述的对象和其他设施,还将提供特定的环境特定对象,其描述和行为超出了本规范的范围,除了指出它们可以提供可以访问的某些属性和可以从ECMAScript程序调用的某些功能。
  ECMAScript最初被设计为用作脚本语言,但已被广泛用作通用编程语言。一个脚本语言是用来操作,自定义和自动化现有系统设施的编程语言。在这样的系统中,通过用户界面已经可以使用有用的功能,并且脚本语言是将该功能暴露给程序控制的机制。以这种方式,现有系统被称为提供对象和设施的主机环境,从而完成了脚本语言的功能。脚本语言专门用于专业程序员和非专业程序员。
  ECMAScript最初设计为Web脚本语言,提供了一种在浏览器中激活Web页面的机制,并将其作为基于Web的客户端 - 服务器架构的一部分执行服务器计算。ECMAScript现在用于为各种主机环境提供核心脚本功能。因此,除了任何特定的主机环境之外,本文档还规定了核心语言。
  ECMAScript使用已经超出了简单的脚本,现在它已经用于许多不同环境和规模的全方位的编程任务。随着ECMAScript的使用不断扩大,其功能和设施也得到了扩展。ECMAScript现在是一个功能齐全的通用建议编程语言。
  ECMAScript的一些设施类似于其他编程语言中使用的工具; 特别是C,Java™,Self和Scheme,如下所述:
  ISO/IEC 9899:1996,编程语言- C。
  Gosling, James, Bill Joy and Guy Steele。Java ™语言规范。Addison Wesley 出版社,1996年。
  Ungar,David和Smith,Randall B. Self:简单的力量。《OOPSLA的87个会议程序》,第227 - 241页,Orlando,FL,1987年10月。
  
  4.1Web脚本
  Web浏览器为客户端计算提供ECMAScript主机环境,包括例如表示窗口,菜单,弹出窗口,对话框,文本区域,锚点,框架,历史记录,Cookies和输入/输出的对象。此外,主机环境提供了一种将脚本代码附加到诸如焦点改变,页面和图像加载,卸载,错误和中止,选择,表单提交和鼠标动作等事件的手段。脚本代码出现在HTML中,显示的页面是用户界面元素和固定和计算的文本和图像的组合。脚本代码对用户交互无反应,不需要主程序。
  Web服务器为服务器端计算提供了不同的主机环境,包括表示请求,客户端和文件的对象; 以及锁和共享数据的机制。通过一起使用浏览器端和服务器端脚本,可以在客户机和服务器之间分配计算机,同时为基于Web的应用程序提供定制的用户界面。
  
  4.2ECMAScript概述
  以下是ECMAScript的非正式概述 - 不是描述所有的语言部分。这个概述不是标准的一部分。
  ECMAScript是基于对象的:基本语言和主机设施由对象提供,ECMAScript程序是一组通信对象。在ECMAScript中,对象是零个或多个 properties的集合,每个attributes确定每个property可以如何被使用– 例如,当property的Writable属性设置为false时,任何执行ECMAScript代码来为property分配不同的值的尝试都会失败。Properties 是容纳其他对象,原始值或 函数的容器。原始值是以下内置类型之一的成员:Undefined, Null, Boolean, Number, String,和 Symbol;一个object是内置类型Object的成员 ; 函数是一个可调用对象。通过property与对象关联的函数称为 方法。
  ECMAScript定义了一个内置对象的集合,其中包含ECMAScript实体的定义。这些内置对象包括全局对象; 对象是语言运行时语义的基础,包括Object, Function, Boolean, Symbol,和各种Error对象; 表示和操作数值的对象,包括Math, Number和Date ; 文本处理对象 String和RegExp; 表示索引值的集合的对象包括Array和九种不同类型的类型数组,其元素都具有特定的数字数据表示; 键集合包括Map 和Set对象; 支持结构化数据的对象包括JSON对象,ArrayBuffer和DataView ; 支持控制抽象的对象,包括生成器(generator)函数和Promise对象; 以及反射对象,包括Proxy和Reflect。
  ECMAScript还定义了一组内置运算符。ECMAScript运算符包括各种一元运算,乘法运算符,加法运算符,按位移位运算符,关系运算符,等式运算符,二进制运算符,二进制逻辑运算符,赋值运算符和逗号运算符。
  modules支持大型ECMAScript程序,这些程序允许将程序分成多个语句和声明序列。每个模块(module)明确地标识它所使用的声明,这些声明需要由其他模块提供,哪些声明可供其他模块使用。
ECMAScript语法有意地类似于Java语法。ECMAScript语法松散,这使其成为易于使用的脚本语言。例如,一个变量不需要声明其类型,也不需要与属性关联的类型,并且定义的函数在调用之前不需要以文本方式显示它们的声明。
  
  4.2.1对象
  即使ECMAScript包含类定义的语法,ECMAScript对象也不是基于类的,例如C ++,Smalltalk或Java。相反,对象可以以各种方式创建,包括通过文字符号或通过 构造器(constructors)构造器创建对象,然后执行通过将初始值分配给其属性来初始化其全部或部分的代码。每个构造函数都是一个具有“prototype”属性的函数,”prototype”用于实现基于原型的继承和共享属性。通过使用new表达式中的构造函数创建对象; 例如,new Date(2009,11)创建一个新的Date对象。调用构造函数而不使用new会导致依赖于构造函数的后果。例如, Date()生成当前日期和时间的字符串表示,而不是一个对象。
  由构造函数创建的每个对象都有一个隐式引用(称为对象的原型)到其构造函数的”prototype”属性值。此外,原型可能有一个非空隐含引用到它的原型,等等; 这被称为原型链。当引用对象中的属性时,该引用是指原型链中包含该名称的属性的第一个对象中该名称的属性。换句话说,首先对直接提到的对象进行检查,如果该对象包含命名的属性,那就是引用引用的属性; (这段翻译的有点懵,附上原文:if that object contains the named property, that is the property to which the reference refers;)如果该对象不包含named属性,那么将检查该对象的原型; 等等。
图1 - 对象/原型关系
  在基于类的面向对象语言中,一般来说,状态由实例承载,方法由类承载,继承的只是结构和行为。在ECMAScript中,状态和方法由对象承载,而结构,行为和状态都是继承的。
  所有的对象不直接包含一个的特定属性,该属性的原型包含共享该属性和值。图1说明了这一点:
  CF是一个构造函数(也是一个对象)。通过使用new表达式创建了五个对象: cf1,cf2,cf3,cf4和cf5。每个对象包含名为q1和q2的属性。虚线代表隐含的原型关系; 所以,例如,cf3的原型是CFp。构造函数 CF本身有两个属性,叫做P1和P2,这对CFp,cf1,cf2,cf3,cf4或cf5是不可见的。CFp中名为CFP1的属性是由cf1,cf2,cf3,cf4,和cf5(而不是CF)所共享的,因为在CF p的隐式原型链发现的任何属性没有名为q1,q2,或CFP1。请注意, CF和CFp之间不存在隐式原型链接。
  与大多数基于类的对象语言不同,属性可以通过为对象动态分配值来添加到对象中。也就是说,构造函数不需要为所有或任何构造的对象的属性命名或赋值。在上图中,可以通过为CFp中的属性分配一个新值, 为cf1,cf2, cf3,cf4和cf5添加一个新的共享属性。
  
  4.2.2ECMAScript的严格变体
  ECMAScript语言认识到一种可能性,就是该语言的某些用户可能希望限制他们使用该语言中某些可用的特性(features)。为了安全起见,他们这样做的原因是:避免他们认为容易出错的特性,加强错误检查,他们也可能有其他原因选择这样做。为了支持这种可能性,ECMAScript定义了语言的严格变体。该语言的严格变体排除了常规ECMAScript语言的一些特定句法和语义特征,并修改了某些特性的详细语义。严格变体还指定了额外的错误条件,必须通过抛出错误异常的情况来报告,而不是以非严格的语言形式指定为错误。
  ECMAScript的严格变体通常被称为语言的严格模式。ECMAScript的严格模式选择和使用严格模式语法和语义明确地在单个ECMAScript源文本单元的级别。因为在一个语法源文本单元的级别选择了严格模式,严格模式只会在这样的源文本单元中施加具有局部效果的限制。严格模式不会限制或修改必须在多个源文本单元上一致操作的ECMAScript语义的任何方面。完整的ECMAScript程序可能由严格模式和非严格模式的ECMAScript源文本单元组成。在这种情况下,严格模式只适用于在严格的模式源文本单元中实际执行的代码。
  为了符合本规范,ECMAScript实现必须实现完全无约束的ECMAScript语言和本规范定义的ECMAScript语言的严格变体。此外,一个实现必须支持将无限制和严格模式源文本单元组合到单个复合程序中。
    
  4.3术语和定义
  为了本文档的目的,以下术语和定义适用。
  
  4.3.1 类型
  本规范第6条定义的一组数据值的集
  4.3.2 原始值
  Undefined,Null,Boolean,Number,Symbol或String类型之一的成员,如第6节所定义
  注意:原始值是直接在语言实现的最低级别表示的基准。
  4.3.3 对象
  Object类型的成员
  注意:对象是属性的集合,并且具有单个原型对象。原型可能是空值。
  4.3.4 构造函数
  创建和初始化对象的函数对象
  注意:构造函数的prototype属性的值是用于实现继承和共享属性的原型对象。
  4.3.5 原型
  为其他对象提供共享属性的对象
  注意:当构造函数创建一个对象时,该对象隐式引用构造函数的prototype属性以便解析属性引用。构造函数的prototype属性可以由程序表达式constructor.prototype引用 ,添加到对象的原型中的属性通过继承被所有共享原型的对象共享。或者,可以通过使用内置函数Object.create显式指定的原型创建一个新对象。
  4.3.6 普通对象
  具有所有对象必须支持的基本内部方法的默认行为的对象。
  4.3.7 独特对象
  独特对象不具有所有对象必须支持的一个或多个必需内部方法的默认行为
  注意:任何不是普通对象的对象都是独特的对象。
  4.3.8 标准对象
  其语义由本规范定义的对象
  4.3.9 内置对象
  由ECMAScript实现指定和提供的对象
  注意:本标准内置对象在本规范中定义。ECMAScript实现可以指定和提供其他种类的内置对象。一个内置的构造函数是一个内置对象,也是一个构造函数。
  4.3.10 undefined值
  当变量未被赋值时使用的原始值。
  4.3.11 Undefined类型
  其唯一值是undefined的类型。
  4.3.12 空值
  表示有意不存在任何对象值的原始值
  4.3.13 Null类型
  其唯一值为null值的类型
  4.3.14 布尔值
  布尔类型的成员
  注意:只有两个布尔值:true和false
  4.3.15 Boolean类型
  由原始值true和false组成的类型
  4.3.16 Boolean对象
  Object类型的成员,它是标准内置Boolean构造函数的实例
  注意:通过在new表达式中使用Boolean 构造函数创建布尔对象,提供一个布尔值作为一个参数。生成的对象具有一个内部插槽,其值为布尔值。一个布尔对象可以被强制为布尔值。
  4.3.17字符串值
  原始值是零个或多个16位无符号整数的有限序列
  注意:字符串值是String类型的成员。序列中的每个整数值通常表示UTF-16文本的单个16位单元。但是,ECMAScript对值不作任何限制或要求,除了它们必须是16位无符号整数。
  4.3.18 String类型
  所有可能的字符串值的集合
  4.3.19 String对象
  Object类型的成员,它是标准内置String构造函数的实例
  注意:通过在new表达式中使用String构造函数创建字符串对象,并将字符串值作为参数。生成的对象具有一个内部插槽,其值为字符串值。通过调用String构造函数作为函数,可以将String对象强制转换为String值(21.1.1.1)。
  4.3.20 数值
  原始值对应于双精度64位二进制格式IEEE 754-2008值
  注意:数字值是Number类型的成员,是数字的直接表示形式。
  4.3.21 Number类型
  所有可能的数字值的集合,包括特殊的“非数字”(NaN)值,正无穷大和负无穷大
  4.3.22 Number对象
  Object类型的成员,它是标准内置Number构造函数的实例
  注意:通过在new表达式中使用Number构造函数创建Number对象,并将数值作为参数提供。生成的对象具有一个内部插槽,其值是数字值。通过调用Number构造函数作为函数,可以将Number对象强制转换为数值(20.1.1.1)。
  4.3.23 Infinity
  数值是正无穷值
  4.3.24 NaN
  数字值是IEEE 754-2008“Not-a-Number”值
  4.3.25 符号值
  表示一个独特的、非字符串对象属性键的原始值
  4.3.26 Symbol类型
  所有可能的符号值的集合
  4.3.27 Symbol对象
  Object类型的成员,它是标准内置Symbol构造函数的实例
  4.3.28 函数
  Object类型的成员,可以作为子例程调用
  注意:除了其properties之外,函数还包含可执行代码和状态,以确定在调用时的行为。函数的代码可能在ECMAScript中编写,也可能不是。
  4.3.29 内置函数
  内置的对象是一个函数
  注意:内置函数的示例包括parseInt和Math.exp。一个ECMAScript实现可以提供在本规范中未描述的内置函数以实现相关功能。
  4.3.30 property
  一个对象的一部分,它将一个键(一个字符串值或符号值)和一个值关联起来
  注意:根据property的形式,该值可以直接表示为数据值(原始值,对象或函数对象),也可以由一对访问函数间接表示。
  4.3.31 方法
  property的值是函数
  注意:当一个函数被调用作为对象的方法,所述对象被传递给函数作为其该值。
  4.3.32 内置方法
  方法是内置函数
  注意:本规范中定义了标准的内置方法,ECMAScript实现可以指定并提供其他额外的内置方法。
  4.3.33 属性(attribute)
  定义特性(property)的某些特征的内部值
  4.3.34 自有特性(own property)
  由其对象直接包含的特性
  4.3.35 继承特性(inherited property)
  对象的特性不是自己的特性,而是对象的原型的特性(自己的或继承的)
  
  4.4本规范的结构
  本规范的其余部分结构如下:
  第5条定义了整个规范中使用的符号约定。
  第6-9条定义ECMAScript程序运行的执行环境。
  第10-16条定义了实际的ECMAScript编程语言,包括其语法编码和所有语言特征的执行语义。
  第17-26条定义了ECMAScript标准库。它包括ECMAScript程序执行时可以使用的所有标准对象的定义。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值