在基于 chrome 的浏览器中 array.push 实现有什么问题?

问题描述 投票:0回答:1

我原以为

array.push
是一个非常基本的功能,所以我很惊讶地看到 Chromium 浏览器的 Babel polyfill
array.push
。我检查了 MDN 文档中的 array.push 并看到它说:

另请参阅

core-js 中 Array.prototype.push 的 Polyfill 并修复了此方法

我检查了core-js文档及其实现,但不清楚它如何“修复”Chromium浏览器中的问题。

那么问题出在哪里呢? Firefox/Safari 的实现与 Chromium 的实现有何不同?检查以下输出以供参考。

The corejs3 polyfill added the following polyfills:
  es.object.to-string { "ie":"10" }
  es.promise { "ie":"10" }
  web.dom-collections.for-each { "ie":"10" }
  es.array.from { "ie":"10" }
  es.string.iterator { "ie":"10" }
  es.array.push { "chrome":"115", "edge":"110", "ie":"10" } //Only for Chromium, not for FF & Safari
  ...

我的第二个问题是,如果我不想让 Babel 进行 Polyfill

array.push
(但需要它来 Polyfill 其他缺失的功能),我该怎么办?以下设置不行。

    "useBuiltIns": "usage",
    "shippedProposals": true,
    "corejs": {
          "version": 3.33
          "proposals": false
    }
javascript google-chrome firefox babeljs polyfills
1个回答
1
投票

那么问题出在哪里?

当浏览器允许将数组长度设为不可写(如此处所示)时,它会影响

Array.push()
方法,因为
Array.push()
将指定元素添加到数组末尾并返回数组的新长度。 如果数组长度设置为不可写,则数组将无法更新它。这会导致错误。不幸的是,这没有被考虑到需要引用所以当发现错误时,必须解决它。这就是你刚刚遇到的

properErrorOnNonWritableLength().

© www.soinside.com 2019 - 2024. All rights reserved.