为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Cats萌萌 2019-01-30 17:54:05
是否有办法重写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 回答

?
富国沪深

TA贡献1790条经验 获得超9个赞

当然不会缓存。

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属性不会缓存,每次都会读取


查看完整回答
反对 回复 2019-01-30
  • 1 回答
  • 0 关注
  • 443 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信