详细参考: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))