理解 ECMAScript 规范

本文介绍了如何理解ECMAScript规范,特别是如何解析`Object.prototype.hasOwnProperty`的工作原理,包括规范中的语言类型、规范类型、抽象操作符、内部插槽和函数,以及Completion Record的概念。通过例子解析了规范中`HasOwnProperty`和`[[GetOwnProperty]]`等内部方法的执行流程。
摘要由CSDN通过智能技术生成

即使你了解 JavaScript,阅读它的规范(ECMAScript 语言规范简称 ECMAScript 规范) 也是会令人生畏的。至少这是我第一次阅读时的感受。
让我们通过一个具体的示例开始。下面的代码演示了 Object.prototype.hasOwnProperty 的使用:
const o = { foo: 1 };
o.hasOwnProperty(‘foo’); // true
o.hasOwnProperty(‘bar’); // false
复制代码在这个例子中,o 没有 hasOwnProperty 属性,因此我们会在它的原型链上寻找 hasOwnProperty 属性,最终我们在 Object.prototype,o 的原型上找到了它。
为了描述 Object.prototype.hasOwnProperty 是怎么工作的,ECMAScript 规范使用了伪代码来描述它:

Object.prototype.hasOwnProperty(v)
当带参数 v 调用 hasOwnProperty,会经过以下步骤
1、令 P 为 ?ToPropertyKey(V).
2、令 O 为 ?ToObject(this value).
3、返回 ?HasOwnProperty(O, P).

以及:

HasOwnProperty
抽象的操作符 HasOwnProperty 用来确认一个对象自身是否含有某个特定键的属性,它返回有一个布尔值。调用这个操作符需要两个参数,O 和 P,前者是一个对象,后者是个属性键的名称。这个抽象操作符的执行,会经过以下步骤:
1、断言:Type(O) 是一个对象
2、断言: IsPropertyKey§ 为 true
3、令 desc

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值