我试图循环访问一个对象,并根据其类型对每个不同的子对象使用不同的函数。 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/