詳細參考:http://yanhaijing.com/es5/#77算法
8.6--Object類型測試
Object:一個屬性的集合。每一個屬性既能夠是一個命名的數據屬性,也能夠是一個命名的訪問器屬性,或是一個內部屬性。es5
兩種帶名字的訪問器屬性(非內部屬性):get(取值) 和 put(賦值)。prototype
8.6.1--Propertyorm
Attributes用於定義和解釋命名屬性properties的狀態。命名的數據屬性由一個名字關聯到一系列特性(attributes)。對象
全部對象(包括宿主對象)必須實現下表中的全部內部屬性。blog
全部對象都有一個叫作[[prototype]]的內部屬性,此對象的值是null或一個對象,而且它用於實現繼承。一個原生屬性是否能夠把宿主對象做爲它的[[Prototype]]取決於實現。全部[[prototype]]鏈必須是有限長度(即從任何對象開始,遞歸訪問[[prototype]]內部屬性必須最終到頭,而且值是null)。從[[prototype]]對象繼承來的命名數據屬性(做爲子對象的屬性可見)是爲了get請求,但沒法用於put請求。命名訪問器屬性會把get和put請求都繼承。繼承
本規範中的每種內置對象都定義了[[Class]]內部屬性的值。內部屬性的值能夠是除了"Arguments","Array","Boolean","Date","Error","Function","JSON","Math","Number","Object","RegExp","String"的任何字符串。[[Class]]內部屬性的值用於內部區分對象的種類。本規範中除了經過Object.prototype.toString沒有提供任何手段使程序訪問此值。遞歸
8.7引用規範類型ip
一個引用是個已解決的命名綁定。一個引用由三部分組成,基值,引用名稱和布爾值 嚴格引用標誌。基值是undefined,一個Object,一個Boolean,一個String,一個Number,一個environment record中的任意一個。基值是undefined表示此引用能夠不解決一個綁定。引用名稱是一個字符串。
8.7.1 GetValue(v)
8.7.2 PutValue(v,w)
本規範中使用如下抽象操做接近引用的組件:
8.9 完結規範類型
完結類型的值是由三部分組成:形如(type,value,target)。其中type是normal,break,continue,return,throw之一。value是任何ECMAScript語言值或empty,target是任何ECMAScript標識符或empty。
8.10 屬性描述符及屬性標識符規範類型
8.10.1 IsAccessorDescriptor(Desc)
8.10.2 IsDataDescriptor(Desc)
8.10.3 IsGenericDescriptor(Desc)
8.10.4 FromPropertyDescriptor(Desc)
8.10.5 ToPropertyDescriptor(Obj)
8.12 對象內部方法的算法
8.12.1 [[GetOwnProperty]](P)
8.12.2 [[GetProperty]](P)
8.12.3 [[Get]](P)
8.12.4 [[CanPut]](P)
8.12.5 [[Put]](P,V,Throw)
8.12.6 [[HasProperty]](P)
8.12.7 [[Delete]](P,Throw)
8.12.8 [[DefaultValue]](hint)
8.12. 9[[DefineOwnProperty]](P,Desc,Throw)
9 類型轉換與測試
轉換運算符是多態的 --它們能夠接受任何ECMAScript語言類型的值,可是不接受規範類型。
9.1 ToPrimitive--接受一個值,和一個可選的指望類型作參數。
9.2 ToBoolean
9.3 ToNumber
9.4 ToInteger(先調用ToNumber,NaN-->+0;+0,-0,+∞,-∞-->Result(1);計算sign(Result(1) * floor(abs(Result(1)))),返回Result(4))
9.5 ToInt32:(32位有符號整數)
9.6 ToUint32:(32位無符號整數)
9.7 ToUint16:(16位無符號整數)
9.8 ToString
9.9 ToObject
9.10 CheckObjectCoercible:(在其參數沒法用ToObject轉換成對象的狀況下拋出一個異常)
9.11 IsCallable:(肯定其必須是ECMAScript語言值的參數是不是一個可調用對象)
9.12 SameValue算法:(SameValue(x,y))