JavaScript性能(typeof arr[i]==“undefined”num<;arr[i])
我正在寻找一种方法来避免在每个JavaScript性能(typeof arr[i]==“undefined”num<;arr[i]),javascript,performance,micro-optimization,Javascript,Performance,Micro Optimization,我正在寻找一种方法来避免在每个arr[I] 我需要考虑arr[I]可以0 如果arr[I]是undefined或大于num请尝试以下操作: arr[i] == undefined || num < arr[i] arr[i]==未定义的| | num=0&&arr[i]
arr[I]
我需要考虑arr[I]
可以0
如果arr[I]
是undefined
或大于num
请尝试以下操作:
arr[i] == undefined || num < arr[i]
arr[i]==未定义的| | num
或
arr[i]=(arr[i]>=0&&arr[i]
或
arr[i]=(!isNaN(arr[i])&&arr[i]
回答性能问题的方法是运行基准测试
有四种选择:
arr[i]==未定义| | num
typeof-arr[i]=='undefined'| | num
!(arr中的i)| num
。这假设undefined
值为真“洞”(缺少索引),而不是存在但值为undefined
的索引!(num>=arr[i])
。这利用了这样一个事实:与未定义
的比较返回false
isNaN
大约要慢50%
因此,如果您只对性能感兴趣,请使用1或2。如果您想以较小的性能代价保存击键,请使用4。但是,4的可读性也较低,您可能需要添加一条注释,说明它如何处理未定义的
,这将否定任何击键节省
请参阅。检查
something===something\u other
的速度是最快的,但让您的代码变慢的是,您正在做两件事,而不是一件事:
您正在检查arr[i]==“undefined”和num
的typeofarr[i]==“undefined”
,即使javascript引擎仍将检查数据类型
我的意思是,如果arr[I]==“undefined”的类型为真,那么num
将始终为假。对于>=
,这也将是错误的,这将导致解决方案
而不是:
if (typeof arr[i] === “undefined” || num < arr[i])
另一方面
- 如果您不知道当前速度太慢,如果您没有对其进行分析,则不应该对其进行优化。见:
- 为什么列表中还有未定义的数据?你不能在写进清单之前,而不是在阅读时过滤掉吗?在container中始终只有一种数据类型是一个好主意(除非您有很好的理由)
- 如果您有一个键->值映射,其中一些键没有定义,那么数组可能不是适合您的用例的容器
未定义的?在数字数组中似乎不是一个有用的值。不管是哪种方式,都不需要typeof
来检查undefined
。这个怎么样:arr[i]=Math.max(arr[i]|0,num)
为什么首先需要让这样简单的逻辑更快?没有比这更快的了。如果(!(num>=arr[i]){arr[i]=num;}
,您可以尝试使用if(!(num>=arr[i]){arr[i]
来反转未定义的情况。这将用num
替换arr[i]
的负值,这可能不是OP想要的。在这种情况下,您可以尝试使用isNaN方法isNaN
似乎比直接检查未定义的
要慢50%。看。哦,谢谢你的更新。。对于这种情况,您的第一个选项很酷,但我的建议是不要检查typearr[i]==undefined | | num
arr[i]=(!isNaN(arr[i]) && arr [i] < num) ? arr[i] : num;
if (typeof arr[i] === “undefined” || num < arr[i])
if (!(num >= arr[i]))