以编程方式确定是不是可以在对象上运行 for 循环的最佳解决方案
Posted
技术标签:
【中文标题】以编程方式确定是不是可以在对象上运行 for 循环的最佳解决方案【英文标题】:Programatically the best solution to determine if for loop can be run on object以编程方式确定是否可以在对象上运行 for 循环的最佳解决方案 【发布时间】:2016-06-21 15:17:05 【问题描述】:在研究中,我试图找到最快的方法来确定一个对象是否具有值,并且可以在该对象上执行 for。 参考:https://jsperf.com/jquery-each-vs-each-vs-for-loop/2
我曾经这样做过,但在与同事讨论时,他正在使用 .each,我们一起查找,发现这两种方法都很慢,需要改进。
if(Object.keys(X).length > 0)
// Execute For
这是我所知道的:
obj instanceof Object
和
typeof(obj) == "object" and obj !== "null"
因为 null 是一个对象,两者都有其缺点,但也许还有另一种更优越的方法。
【问题讨论】:
空对象呢?您的代码将以不同的方式对待它们。那么你真正需要的是什么? 您是指for in
、for of
还是for (i=0; i<…length; i++)
循环?
在空列表上执行循环有什么危害?
【参考方案1】:
for
循环可以在任何对象上执行,因此这里无需检查。相反,您可能需要考虑要迭代的对象的哪些属性,但这取决于应用程序。
通常在迭代对象时,代码可能如下所示:
for(var i in obj)
if(obj.hasOwnProperty(i))
//do stuff here...
hasOwnProperty
检查确保您只使用添加到对象本身而不是其原型的值。
【讨论】:
以上是关于以编程方式确定是不是可以在对象上运行 for 循环的最佳解决方案的主要内容,如果未能解决你的问题,请参考以下文章
如何在脱机时以编程方式确定本地文件是不是受 TFS 版本控制
如何以编程方式确定文件是不是位于 Linux 和/或 macOS 的网络文件系统(NFS 或 SMB)上?