我正在将特定类型的对象传递给数组。 当我从外部引用打印对象时,我可以看到所有字段。 当我从数组引用中打印相同的对象时,我几乎看不到任何对象。
为了解释,这里是说明问题的代码:
var test = new OpenLayers.Layer.Vector();
var array = [test];
console.log("******* Printing Test directly ***************");
printObjectProperties(test);
console.log("****** Printing Test from array **************");
for (obj in array){
printObjectProperties(obj);
}
printObjectProperties()
函数:
function printObjectProperties(eventData) {
for (var prop in eventData) {
if (!(typeof (eventData[prop]) == "undefined")) {
console.log(prop + " = " + eventData[prop]);
}
};
}
完整代码(完整的html文件,大家可以自行运行在浏览器控制台日志中查看): ( live example )
<html>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js" type="text/javascript"></script>
<script src="http://www.openlayers.org/api/OpenLayers.js"></script>
<script>
$(document).ready(function(){
var test = new OpenLayers.Layer.Vector();
var array = [test];
console.log("******* Printing Test directly ***************");
printObjectProperties(test);
console.log("****** Printing Test from array **************");
for (obj in array){
printObjectProperties(obj);
}
});
function printObjectProperties(eventData) {
for (var prop in eventData) {
if (!(typeof (eventData[prop]) == "undefined")) {
console.log(prop + " = " + eventData[prop]);
}
};
}
</script>
</html>
最佳答案
在 for in
循环中,第一个变量 (obj
) 是键。在作为索引的数组中。
所以基本上您是在 printObjectProperties
中迭代一个数字。因此 0 = 0
,因为您的数组(您有一个元素)的第一个索引是 0
。
改用这个:
printObjectProperties(array[obj]);
这将评估为:
printObjectProperties(array[0]);
或:
printObjectProperties(test);
关于javascript - 在 : Losing type of object when passed from Array? 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6981339/