NodeJS 是否缓存访问 array.length?
Does NodeJS cache access to array.length?
我最近一直在想访问array.length
getter是不是被NodeJS缓存了,但是我只能找到关于JS的结论性答案在浏览器中解释,但我正在用 Typescript 开发应用程序,所以这与我的问题无关(如果我错了请纠正我)
那么,在 NodeJS 14 中访问 array.length
的时间复杂度是 O(1)(由 NodeJS 缓存)还是 O(n)(不由 NodeJS 缓存)?
我有预感它被缓存了,但我真的很想要一个明确的答案或它的“证明”
如果你想问的是 .length
属性 是否是通过每次计算数组元素从头开始计算的,那绝对不是它的工作原理。它是 Array
对象的内部 属性,在修改数组时保持不变。访问 .length
属性,只是检索内部 属性 值。如果这就是你所说的缓存的意思,那么是的,它被缓存了。
在某些特定情况下,优化编译器可以确定您的数组未被修改(例如 for
循环仅使用不修改数组的本地代码迭代数组),其中编译器本身可能会在数组外缓存 .length
属性(但显然这不是你要问的)。
我最近一直在想访问array.length
getter是不是被NodeJS缓存了,但是我只能找到关于JS的结论性答案在浏览器中解释,但我正在用 Typescript 开发应用程序,所以这与我的问题无关(如果我错了请纠正我)
那么,在 NodeJS 14 中访问 array.length
的时间复杂度是 O(1)(由 NodeJS 缓存)还是 O(n)(不由 NodeJS 缓存)?
我有预感它被缓存了,但我真的很想要一个明确的答案或它的“证明”
如果你想问的是 .length
属性 是否是通过每次计算数组元素从头开始计算的,那绝对不是它的工作原理。它是 Array
对象的内部 属性,在修改数组时保持不变。访问 .length
属性,只是检索内部 属性 值。如果这就是你所说的缓存的意思,那么是的,它被缓存了。
在某些特定情况下,优化编译器可以确定您的数组未被修改(例如 for
循环仅使用不修改数组的本地代码迭代数组),其中编译器本身可能会在数组外缓存 .length
属性(但显然这不是你要问的)。