javascript - 使用 for...in 和 instanceof 来解析对象

标签 javascript object

我试图循环访问一个对象,并根据其类型对每个不同的子对象使用不同的函数。 instanceof 似乎是识别非内置类型的唯一方法,因此我尝试将它与 for...in 一起使用;但是,我没有得到预期的输出。

这是一个示例 fiddle 来说明我的问题:http://jsfiddle.net/zv230dvL/2/

function testObject(){}
function testContainer(objects){
  this.zero = objects[0];
  this.one = objects[1];
  this.two = objects[2];
}
var singleObject = new testObject();
var container = new testContainer(
  [new testObject(),
   new testObject(),
   new testObject()]
);
...
//Testing if a single object functions as expected
out(singleObject instanceof testObject);
//Testing if directly referencing an object
//in a container functions as expected
out(container.zero instanceof testObject);
//iterating through a container object...
for(i in container){
 out(i instanceof testObject);   
}

输出为

true
true
false
false
false

首先,执行此类操作的适当方法是什么?

第二,为什么for...in循环中的变量会有这样的行为?

请不要使用 jQuery。

最佳答案

当您使用 for..in 迭代对象时,循环变量将具有字符串类型的键。所以,你应该像这样检查

for (i in container) {
    out(container[i] instanceof testObject);
}

现在,您正在使用 container 中与键 i 对应的对象。通过此更改,所有项目的计算结果都将为 true

注意: for..in 也应该提供所有继承的属性。因此,当您将 for..in 与对象一起使用时,正常的循环模式是

for (i in container) {
    if (container.hasOwnProperty(i)) {
        out(container[i] instanceof testObject);
    }
}

这将确保仅检查对象中直接定义的属性。

关于javascript - 使用 for...in 和 instanceof 来解析对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26494401/

相关文章:

javascript - 如何更改 jQuery "easy pie chart"插件的配置参数?

javascript - 从 JS 中暂停 chrome 中的代码执行。可能的?

javascript - Unslider.js 中的变量递增但未显式递增

c# - MVC3中添加onsubmit事件调用JS函数

javascript - Jquery:如何使 <div> 中的对象在单击时隐藏或显示?

javascript从对象创建按钮

C# 如何从父列表访问继承的对象

javascript - 优化通用编辑功能

python - 如何捕获在python中的对象上调用的任何方法?

java - 使用 Java 以最少的迭代从 Set 中查找并删除特定对象