是否有办法重写JS数组中length的descriptor?

新手上路,请多包涵

是否有办法重写js数组中length的descriptor

在js中,数组length已经有默认的descriptor,并且configurable为false,所以没有办法覆盖,由于我想查看在循环过程中(用length属性去做一个限制结束)是否会将length缓存起来,所以想覆盖length的gettet测试

相关代码

// 请把代码文本粘贴到下方(请勿用图片代替代码)

for (let i = 10; i < arr.length; i++) {
    //想知道arr.length是否每一次都会调用length
}

不知道浏览器内部是否会对length缓存起来,循环的时候是否只call一次length然后后面的循环都用一个缓存值

阅读 1.7k
1 个回答

当然不会缓存。

var array = [0, 1, 2, 3];
for (let i = 0; i < array.length; i++) {
  if (array.length < 10) {
    array.push(4);
  }
  console.log(i)
}

这段代码可以证明。

数组也是对象,因此,这段代码也可以证明

var obj = {}
Object.defineProperty(obj, 'length', {
  get: function () {
    console.log('x');
    return 4;
  }
})

for (var i = 0; i < obj.length; i++) {
  
}

obj.length属性不会缓存,每次都会读取

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题