Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/362.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaScript的时间复杂性';s数组长度_Javascript_Time Complexity - Fatal编程技术网

JavaScript的时间复杂性';s数组长度

JavaScript的时间复杂性';s数组长度,javascript,time-complexity,Javascript,Time Complexity,在JavaScript中调用array.length的时间复杂度是多少?我认为它应该是常量,因为似乎所有数组上的属性都是自动设置的,而您只是在查找它 我认为它应该是常量,因为似乎所有数组上的属性都是自动设置的,而您只是在查找它 对。它是一个存储(未计算)并根据需要自动更新的属性。该规范明确说明了这一点以及其他地方 理论上,JavaScript引擎可以在访问时自由地计算length,就好像它是一个访问器属性一样,只要你不知道(这意味着它不可能是一个访问器属性,因为你可以在代码中检测到它),但是如果

在JavaScript中调用
array.length
的时间复杂度是多少?我认为它应该是常量,因为似乎所有数组上的属性都是自动设置的,而您只是在查找它

我认为它应该是常量,因为似乎所有数组上的属性都是自动设置的,而您只是在查找它

对。它是一个存储(未计算)并根据需要自动更新的属性。该规范明确说明了这一点以及其他地方

理论上,JavaScript引擎可以在访问时自由地计算
length
,就好像它是一个访问器属性一样,只要你不知道(这意味着它不可能是一个访问器属性,因为你可以在代码中检测到它),但是如果
length
被反复使用,lot
for(让n=0;n
浮现在脑海中),我认为我们可以假设所有广泛使用的JavaScript引擎都按照规范所说的做,或者至少做一些恒定时间访问的事情


Just FWIW:请记住,JavaScript的标准数组在理论上是公正的。从理论上讲,JavaScript对象是属性包。因此,在属性包中查找属性在理论上取决于有多少其他属性,如果对象实现为某种名称->值hashmap现代引擎优化对象(Chrome的V8以动态创建动态类并编译它们而闻名),但对这些对象的操作仍然会改变属性查找性能。例如,添加属性可能会导致V8创建子类。删除属性(实际上使用
delete
)会让V8放弃它的双手,并退回到“字典模式”,这会严重降低对对象的属性访问

换句话说:它可能会有所不同,引擎对引擎,甚至对象对对象。但如果您将数组纯粹用作数组(不在数组上存储其他非数组属性),则很可能会得到固定时间的查找

我认为它应该是常量,因为似乎所有数组上的属性都是自动设置的,而您只是在查找它

是的。它是一个存储(不计算)的属性,并根据需要自动更新。规范对此和其他地方都有明确规定

理论上,JavaScript引擎可以在访问时自由地计算
length
,就好像它是一个访问器属性一样,只要你不知道(这意味着它不可能是一个访问器属性,因为你可以在代码中检测到它),但是如果
length
被反复使用,lot
for(让n=0;n
浮现在脑海中),我认为我们可以假设所有广泛使用的JavaScript引擎都按照规范所说的做,或者至少做一些恒定时间访问的事情


Just FWIW:请记住,JavaScript的标准数组在理论上是公正的。从理论上讲,JavaScript对象是属性包。因此,在属性包中查找属性在理论上取决于有多少其他属性,如果对象实现为某种名称->值hashmap现代引擎优化对象(Chrome的V8以动态创建动态类并编译它们而闻名),但对这些对象的操作仍然会改变属性查找性能。例如,添加属性可能会导致V8创建子类。删除属性(实际上使用
delete
)会让V8放弃它的双手,并退回到“字典模式”,这会严重降低对对象的属性访问


换句话说:它可能会有所不同,引擎对引擎,甚至对象对对象。但如果您将数组纯粹用作数组(不存储其他非数组属性),很可能你会得到固定时间的查找。

这似乎不是一个瓶颈,但如果你想确保使用
var len=arr.length
并检查它。这不会造成伤害,而且在我的机器上似乎快了一点,尽管差别不大

var arr=[];
对于(变量i=0;i<1000000;i++){
arr[i]=Math.random();
}
var start=新日期();
对于(变量i=0;i\nvar len:+time2;

这似乎不是一个瓶颈,但如果您想确保使用
var len=arr.length
并检查它。它不会造成伤害,而且在我的机器上似乎快了一点,尽管差别不大

var arr=[];
对于(变量i=0;i<1000000;i++){
arr[i]=Math.random();
}
var start=新日期();
对于(变量i=0;i\nvar len:+time2;

如果可以的话,为什么一个对象属性的时间复杂度值得关注?看起来是这样,很小吗?@SterlingArcher任何时间复杂度都很重要,这样最终的时间复杂度都可以与其他解决方案的复杂度相比较。@KeitelDOG如果你在计算对象道具的时间复杂度,你要么喜欢痛苦,要么你的老板讨厌you@S在这个例子中,我同意,因为这是对象属性。但更多的是因为它超出了我们的控制,而不是因为它是最小的。如果可以的话,为什么一个对象属性的时间复杂度值得关注?似乎如此,最小?@SterlingArcher任何时间复杂度都很重要,所以最终