ECMAScript5学习笔记-第1章至第9章

时间:2021-07-13 14:51:26

详细参考:http://yanhaijing.com/es5/#77

8.6--Object类型

Object:一个属性的集合。每个属性既可以是一个命名的数据属性,也可以是一个命名的访问器属性,或是一个内部属性。

两种带名字的访问器属性(非内部属性):get(取值) 和 put(赋值)。

8.6.1--Property

Attributes用于定义和解释命名属性properties的状态。命名的数据属性由一个名字关联到一系列特性(attributes)。

所有对象(包括宿主对象)必须实现下表中的所有内部属性。

ECMAScript5学习笔记-第1章至第9章

所有对象都有一个叫做[[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没有提供任何手段使程序访问此值。

ECMAScript5学习笔记-第1章至第9章

ECMAScript5学习笔记-第1章至第9章

 

8.7引用规范类型

一个引用是个已解决的命名绑定。一个引用由三部分组成,基值,引用名称和布尔值 严格引用标志。基值是undefined,一个Object,一个Boolean,一个String,一个Number,一个environment record中的任意一个。基值是undefined表示此引用可以不解决一个绑定。引用名称是一个字符串。

 

 8.7.1 GetValue(v)

 8.7.2 PutValue(v,w)

 

本规范中使用以下抽象操作接近引用的组件:

  • GetBase(V)。 返回引用值 V 的基值组件。
  • GetReferencedName(V)。 返回引用值 V 的引用名称组件。
  • IsStrictReference(V)。 返回引用值 V 的严格引用组件。
  • HasPrimitiveBase(V)。 如果基值是 Boolean, String, Number,那么返回 true。
  • IsPropertyReference(V)。 如果基值是个对象或 HasPrimitiveBase(V) 是 true,那么返回 true;否则返回 false。
  • IsUnresolvableReference(V)。 如果基值是 undefined 那么返回 true,否则返回 false。

 

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))