以编程方式确定是不是可以在对象上运行 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 infor of 还是for (i=0; i<…length; i++) 循环? 在空列表上执行循环有什么危害? 【参考方案1】:

for 循环可以在任何对象上执行,因此这里无需检查。相反,您可能需要考虑要迭代的对象的哪些属性,但这取决于应用程序。

通常在迭代对象时,代码可能如下所示:

for(var i in obj) 
    if(obj.hasOwnProperty(i)) 
        //do stuff here...
    

hasOwnProperty 检查确保您只使用添加到对象本身而不是其原型的值。

【讨论】:

以上是关于以编程方式确定是不是可以在对象上运行 for 循环的最佳解决方案的主要内容,如果未能解决你的问题,请参考以下文章

如何在swift中使用for循环以编程方式创建按钮

以编程方式确定大对象堆的限制

如何在脱机时以编程方式确定本地文件是不是受 TFS 版本控制

如何以编程方式确定文件是不是位于 Linux 和/或 macOS 的网络文件系统(NFS 或 SMB)上?

以编程方式确定 Excel 文件 (.xls) 是不是包含宏

如何以编程方式检查应用程序是不是在 TestFlight beta 模式下运行? [复制]