是否有办法重写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然后后面的循环都用一个缓存值


Cats萌萌
浏览 444回答 1
1回答

富国沪深

当然不会缓存。var&nbsp;array&nbsp;=&nbsp;[0,&nbsp;1,&nbsp;2,&nbsp;3];for&nbsp;(let&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;<&nbsp;array.length;&nbsp;i++)&nbsp;{&nbsp;&nbsp;if&nbsp;(array.length&nbsp;<&nbsp;10)&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;array.push(4); &nbsp;&nbsp;} &nbsp;&nbsp;console.log(i) }这段代码可以证明。数组也是对象,因此,这段代码也可以证明var&nbsp;obj&nbsp;=&nbsp;{}Object.defineProperty(obj,&nbsp;'length',&nbsp;{&nbsp;&nbsp;get:&nbsp;function&nbsp;()&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;console.log('x');&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;4; &nbsp;&nbsp;} })for&nbsp;(var&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;<&nbsp;obj.length;&nbsp;i++)&nbsp;{ &nbsp;&nbsp; }obj.length属性不会缓存,每次都会读取
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript