解密JS Array.prototype.reverse

问题描述

最近,我决定深入了解JS基准测试,并决定要击败原生反向功能,我应该了解它的内在作用。

我一直在阅读array.prototype.reverse的ECMAscript docs,尽管使用的语法有些神秘,但我收集了该方法执行一个半循环并将上限设置为长度-1 -i,这就是我要这样做的方式。在循环内部,我认为实际值交换由以下代码处理:

If lowerExists is true and upperExists is true,then
Perform ? Set(O,lowerP,upperValue,true).
Perform ? Set(O,upperP,lowerValue,true).

Set ( O,P,V,Throw )方法似乎是一个动作动词,因为它实际上设置了一个值。让我们仔细看看。

抽象操作Set接受参数O(一个对象),P(一个属性键),V(一个ECMAScript语言值)和Throw(一个布尔值)。它用于设置对象的特定属性的值。 V是该属性的新值。调用时,它将执行以下步骤:

Assert: Type(O) is Object.
Assert: IsPropertyKey(P) is true.
Assert: Type(Throw) is Boolean.
Let success be ? O.[[Set]](P,O).
If success is false and Throw is true,throw a TypeError exception.
Return success.

第4行出现问题:function is defined in terms of itself

我的问题是:

  1. array.prototype.reverse在后台有什么作用,我是否正在寻找合适的位置?
  2. Set(O,P,V,Throw)是否等于map.set(k,v)?
  3. 使用Set(O,P,V,Throw)方法可以获得什么效率?这实际上是使用的方法,还是仅仅是引擎执行的某种魔术的抽象表示?
  4. 可以完全按照常规javascript代码重新创建整个reverse()函数吗?我已经熟悉通常的examples on Stackoverflow

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...