ES5

ES5笔记

  • use strict
    严格模式:ECMAScript 中定义了语言的严格变体。语言的严格变体,排除了 ECMAScript 语言的某些特定的语法和语义特征,还修改了某些功能的详细语义。严格变体还指定了必须抛出错误异常报告的额外错误条件,即使在非严格的语言形式下这些条件不属于错误。
  • 原生对象
    原生对象:内置对象+宿主对象
    内置对象:由 ECMAScript 实现提供,独立于宿主环境的对象,ECMAScript 程序开始执行时就存在。
    宿主对象:由宿主环境提供的对象,用于完善 ECMAScript 执行环境。
  • 基本类型
    null、undefined、boolean、string、number
  • 引用类型
    Object类型、Array类型
    Object类型:
    Object:数据属性<–named data property–>、访问器属性<–named accessor property–>(get、put进行取值和赋值)、内部属性(internal property)

javascript的方法分为三类:对象方法(需要生成实例才能实现,可继承)、类方法(不需要生成实例就可以实现,不可继承)、原型方法(主要是对系统对象进行扩展,例如array类型的通常没有可用的方法,就可以创建原型方法赋予数组方法,可继承)

数据属性:

特征名称取值描述
[[value]]任何ES语言类型通过property来取值
[[writeable]]boolean类型若为false,赋值操作会失败
[[Enumerable]]boolean类型若为true,可被for in枚举,若为false,则不可枚举
[[Configurable]]boolean类型若为false,改变它的attributes(value特殊)会失败

访问器属性:

特征名称取值描述
[[get]]Object或者undefined如果该值是一个Object对象,每次有对该属性进行 get 访问时,该函数的内部方法 [[Call]]会被一个空参数列表调用,以返回该属性值
[[set]]Object或者undefined如果该值为一个 Object 对象,那么它必须是一个函数对象。每次有对该属性进行 set 访问时,该函数的内部方法 [[Call]]会被一个参数列表调用,这个参数列表包含分配的值作为唯一的参数。property 的内部方法 [[Set]] 产生的影响可能会,但不是必须的,对随后的 property 内部方法 [[Get]] 的调用返回结果产生影响
[[Enumerable]]boolean决定是否可被枚举
[[Configurable]]boolean如果为 false,试图删除该属性,改变该属性为访问器属性,或改变它的 attributes(和 [[Value]] 不同),都会失败
(访问器属性和数据属性的默认参数值:
特性名称参数值
[[value]]undefined
[[get]]undefined
[[set]]undefined
[[Writable]]true
[[Enumerable]]true
[[Configurable]]true

内部属性:

内部属性取值说明
[[prototype]]object或null此对象的原型
[[class]]String说明规范定义的对象分类的一个字符串值
[[Extensible]]boolean说明是否可为对象添加自身属性
[[Extensible]]SpecOp(propertyName) → any返回命名属性的值
[[GetOwnProperty]]SpecOp (propertyName) → Undefined 或 Property Descriptor返回此对象的自身命名属性的属性描述,如果不存在返回 undefined
[[GetProperty]]SpecOp (propertyName) → Undefined 或 Property Descriptor返回此对象的完全填入的自身命名属性的属性描述,如果不存在返回 undefined
[[Put]]SpecOp (propertyName, any, Boolean)将指定命名属性设为第二个参数的值。flog 控制失败处理。
[[CanPut]]SpecOp (propertyName) → Boolean返回一个 Boolean 值,说明是否可以在 PropertyName 上执行 [[Put]] 操作。
[[HasProperty]]SpecOp (propertyName) → Boolean返回一个 Boolean 值,说明对象是否含有给定名称的属性。
[[Delete]]SpecOp (propertyName, Boolean) → Boolean从对象上删除指定的自身命名属性。flog 控制失败处理
[[DefaultValue]]SpecOp (Hint) → primitiveHint 是一个字符串。返回对象的默认值
[[DefineOwnProperty]]SpecOp (propertyName, PropertyDescriptor, Boolean) → Boolean创建或修改自身命名属性为拥有属性描述里描述的状态。flog 控制失败处理。

所有的对象都有一个内部属性[[prototype]],此对象的值是一个Null或者一个对象,并且用它实现继承,一个原生属性是否可以把宿主对象作为它的prototype,取决于实现,并且所有的prototype链都是有限长度的
所有对象都有一个[[Extensible]] 的内部属性,一旦这个属性更改为false,就无法修改未true,并且无法给对象添加命名属性,不得更改[[prototype]][[Class]]的值
注:ECMAScript语法和内置函数没办法修改prototype和class的值,并且无法将Extensible从false改为true

  • 对象内部方法的算法:
GetOwnProperty(P){
	let discription;
	let x = findProperty(P);
	if(x == 数据属性){
		discription.[[value]]=x.[[value]];
		discription.[[Writable]]=x.[[Writable]]
		}
	else if(x == 访问器属性){
		discription.[[Get]] = x.[[Get]];
		discription.[[Put]] = x.[[Put]];
	}
	return discription;
GetProperty(P){
	let prop = GetOwnProperty(P);
	let proto = prop.[[prototype]];
	if()
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值