我正在尝试将数据模拟到通常会接收JSON解析数据结构的函数。运行此操作时,我在此处收到错误TypeError: can't convert undefined to object
:data.targets[i] = {
我做错了什么?
function SendFakeTargets(maxTargets, interval) {
var data = {};
data.timestamp = +new Date;
var time = data.timestamp * 0.0005;
var x = Math.sin(time) * 192 + 256;
var y = Math.cos(time * 0.9) * 192 + 256;
console.log(x, y);
for (var i = 0; i < maxTargets; i++) {
console.log(i);
data.targets[i] = { //error is here
id: i,
x: x + (i * 10),
y: y + (i * 10)
};
}
HandleTargetData(data);
setTimeout("SendFakeTargets("+maxTargets+", "+interval+")", interval);
}
答案 0 :(得分:5)
您之前应该声明
data.targets = [];
在循环中使用data.targets[i]
之前,否则data.targets
为undefined
。用更短的方式你可以写
var data = {
timestamp : +new Date,
targets : []
};
作为旁注,请勿在{{1}}中使用字符串。改为
setTimeout/Interval
答案 1 :(得分:1)
我认为你需要在使用它之前初始化目标数组,因为它是未定义的。您将数据定义为
var data = {}
将它声明为一个空对象,其他任何你正在使用它的东西都是动态添加的 - 在你可以调用它们中的任何索引之前,需要初始化数组。我相信你需要做的是:
var data = { targets: [] }
答案 2 :(得分:0)
您从未将“data.targets”声明为对象,因此javascript不知道如何为其分配任何内容。
在代码的顶部,只需定义“目标”:
data.timestamp = +new Date;
data.targets = {} or [];
...