如下是基於 ECMAScript 5.1 版本 4.3 節內容作的翻譯,最後補充了與 ES6 中的術語定義的區別說明。由於規範中對術語的定義很嚴謹,因此有時你們搞不太懂的一些術語名詞,能夠在規範中的找到明肯定義。數組
本文檔使用了下列術語和定義。函數
一類數據的集合this
是如下類型之一的成員:未定義(Undefined)、空(Null)、數字(Number)、布爾(Boolean) 、字符串(String)。prototype
注:原始值直接表明語言實現的最底層基準。翻譯
對象類型(Object type)的成員。3d
注:對象是屬性的集合,而且有一個原型對象。原型多是空值。code
用來建立和初始化對象的函數對象。對象
注:構造器的「
prototpe
」屬性是用來實現繼承和共享屬性的原型對象。繼承
爲其餘對象提供共享屬性的對象。ip
注:當使用構造器建立對象時,爲了解析屬性引用,對象隱式引用了構造器的「
prototpe
」屬性。構造器的「prototpe
」屬性能夠經過程序表達式 constructor.prototype
引用。全部引用同一原型的對象,經過繼承,都能共享添加到原型上的屬性。另外,可使用內置的Object.create
函數,爲建立的新對象顯式指定原型。
ECMAScript 實現中,並不是由宿主環境,而是徹底經過本規範定義其語義的對象。
注:本規範中定義了標準原生對象。一些原生對象是內置的,其餘原生對象則是在 ECMAScript 程序執行期間構建的。
由 ECMAScript 實現提供的、獨立於宿主環境的、在 ECMAScript 程序執行之初就存在的對象。
注:本規範中定義了標準內置對象,ECMAScript 實現能夠指定和定義其餘的。每一個內置對象都是原生對象。_內置構造器_既是內置對象,也是構造器。
譯者注:「獨立於宿主環境」表示宿主環境無關的,且每一個環境都必須實現的對象。
由宿主環境提供的、用於完善 ECMAScript 執行環境的對象。
注:一個對象,不是原生對象,就是宿主對象。
變量沒賦值時,使用的一個原始值。
僅包含惟一成員 undefined
的類型。
對象值故意缺席時,使用的一個原始值。
僅包含惟一成員 null
的類型。
布爾類型的成員。
注:一共只有兩個布爾值,
true
和false
。
由原始值 true
和 false
組成的類型。
對象類型的成員,是標準內置構造器 Boolean
的一個實例。
注:布爾對象使用
Boolean
構造器在new
表達式中建立,建立時須要提供一個布爾值做爲參數。此參數會成爲生成對象裏的一個內部屬性的值。一個布爾對象能夠強制轉換成布爾值。
是一個原始值,由零個或多個 16 位無符號整數組成的有限有序序列。
注:字符串值是字符串類型的成員。序列中的每一個整數值一般表明 UTF-16 文本的單個 16 位單元。對於其值,ECMAScript 只規定了必須是 16 位無符號整數,除此以外沒有任何其餘的限制和要求。
全部可能的字符串值的集合。
對象類型的成員,是標準內置構造器 String
的一個實例。
注:字符串對象使用
String
構造器在new
表達式中建立,建立時須要提供一個字符串值做爲參數。此參數會成爲生成對象裏的一個內部屬性的值。當把String
構造器做爲函數調用時,可將一個字符串對象強制轉換成字符串值。
是一個原始值,使用雙精度 64 位二進制格式的 IEEE754 值表示。
注:數值是數字類型的成員,是數字的直接表示方式。
全部可能的數值的集合。包括特殊的「Not-a-Number」(NaN
)值、正無窮和負無窮。
對象類型的成員,是標準內置構造器 Number
的一個實例。
注:數字對象使用
Number
構造器在new
表達式中建立,建立時須要提供一個數值做爲參數。此參數會成爲生成對象裏的一個內部屬性的值。當把Number
構造器做爲函數調用時,可將一個數字對象強制轉換成數值。
正無窮的數值表示。
表明 IEEE 754 裏表示「Not-a-Number」的數值。
對象類型的成員,是標準內置構造器 Function
的一個實例。能夠做爲子程序被調用。
注:函數除了命名屬性,還包含可執行代碼、狀態,用來肯定被調用時的行爲。函數的代碼能夠不用 ECMAScript 寫。
譯者注:「函數的代碼能夠不用 ECMAScript 寫」表示函數的代碼實現不限於使用 ECMAScript。
做爲函數的內置對象。
注:好比
parseInt
和Math.exp
都是內置函數。一個實現能夠提供本規範沒有描述的、依賴於實現的內置函數。
譯者注:這裏把
Math.exp
說成內置函數並不嚴謹,歸爲內置方法更合適,也更符合直覺一點。
對象的一部分,用來關聯名(name)和值(value)。
注:根據屬性的特性,屬性值能夠表現爲直接的數據值(一個原始值、對象或函數對象)或間接的一對訪問器函數。
做爲屬性值的函數。
注:當一個函數是做爲對象方法調用時,函數內部的
this
指向這個對象。
做爲內置函數的方法。
譯者注:這個定義有些莫名其妙。嚴謹地說成是 「做爲內置對象屬性值的函數」 更合適些。
首先內置方法自己確定是函數,並且要定義在一個對象上。以
Math.exp
舉例,就是個內置方法;但若是從另外一個角度,把 Math 當作是命名空間,那麼Math.exp
就表示這個命名空間下的內置函數,這也是上面把它歸爲「內置函數」的緣由。一樣的例子還有,
JSON.stringify
和JSON.parse
兩個方法。
定義一個屬性某些特徵的內部值。
直接定義在對象上的屬性。
不是對象的自身屬性,而是對象原型上的屬性(自身或繼承的)。
ES6/ECMAScript 2015 中本節的術語定義與 ES5.1 大致相同。術語個數調整至 35 個,總結爲:增長 4 個,修改 2 個,刪除了 1 個。
下面詳細列明。
普通對象(ordinary object)
是這樣一個對象——擁有每一個對象都有的基本內部方法(essential internal methods),且每一個方法都是默認的行爲表現。
獨特對象(exotic object)
注:一個對象不是普通對象,就是獨特對象。
是這樣一個對象——沒有擁有每一個對象都有的基本內部方法;或擁有但有一個或多個方法的行爲表現不是默認的。
Symbol 值
是一個原始指,對象可使用它做爲屬性鍵的值。它屬於一種非字符串類型的、能標識惟一性的 Symbol 類型。
譯者注:今後,對象屬性鍵的值能夠有兩種選擇,一種使用字符串,一種使用 Symbol 值。
Symbol 類型
全部可能的 Symbol 值的集合。
Symbol 對象
對象類型的成員,是標準內置構造器 Symbol
的一個實例。
譯者注:好笑的是,做爲開發人員咱們並不能使用
new Symbol()
的方式建立一個 Symbol 對象。由於規範中定義,若是以
new
的方式調用Symbol
構造器,會拋出TypeError
類型錯。咱們只能經過某些方式,證實確實是有「Symbol 對象」的——在 Symbol 值上調用
Symbol.prototype
對象上共享的方法,好比toString()
,valueOf()
等。
原始值
ES6 引入了一個新的原始類型 Symbol。
是如下類型之一的成員:未定義(Undefined)、空(Null)、數字(Number)、布爾(Boolean) 、字符串(String)、Symbol(Symbol)。
原生對象 -> 標準對象(standard objec)
由本規範定義其語義的對象。
譯者注:規範試圖模糊「原生」的概念,是否表示宿主環境裏提供的 DOM、BOM 等 API 對象也能夠理解爲是原生對象了?
宿主對象
(完)