Javascript:是否有任何后门方法来访问数组的真正隐藏/私有长度属性

Javascript: Is there any backdoor way to access the real hidden/private length property of an array?

本文关键字:隐藏 属性 数组 任何 是否 后门 方法 访问 Javascript      更新时间:2023-09-26

我在 JavaScript Garden 了解到数组长度属性是一个门面。它是一个 API,而不是保存长度的文本属性。它充当实际长度属性的获取者/设置器:

"While the getter of the length property simply returns the number of elements that are contained in the array, the setter can be used to truncate the array."

是否有任何后门方法可以访问数组的真实隐藏/私有长度属性?

你相信

Array.prototype.length 是一个 getter,或者有任何特殊的隐藏别名的逻辑是什么?

有多种方法可以修改数组长度的值(弹出推送、移位、取消移位等),所以在我看来,虽然可能有一个赋值器,以便:

var x = [0,1,2,3];
x.length = 2; 

首先创建一个长度为 4 的数组,然后将其长度设置为 2,从而删除最后两个成员,我看不出 getter 比简单地返回由其他方法更新的长度更有效

为什么长度会以其他方式实现?如果是,这个隐藏长度的目的是什么?既然如果实现它将完全依赖于实现,那么它将如何使用它?

有趣的想法。我敢肯定答案是否定的,你无法访问它。我想Array#length实现为 getter 的原因只是为了也可以定义自定义 setter。

我想象内部看起来像这样:

function FakeArray() {
  var _length = 0;
  Object.defineProperty(this, 'length', {
    get: function() {
      return _length;
    },
    set: function(length) {
      // some functionality to chop the array
      this.splice(length);
      _length = length;
      return _length;
    }
  });
}