JavaScript:为什么我的对象属性等于undefined?

时间:2014-11-15 23:01:40

标签: javascript arrays object properties

您好,我是一名14岁的程序员。我只是花了一些时间使用名为ModPe的东西为Minecraft Pocket Edition创建一个mod。 ModPe为我提供了一系列可以与JavaScript一起使用的函数。无论如何,我认为我的代码没有错,这就是我来这里的原因。这是:

if (entityIsPassiveMob(entityId)) { // only add entity to list of entitys if entity is a passive mob
    var entityData = 1; // variable to be used with properties, it is set to 1 to become an object. An exception can't have a property because its not an object.
    entityData.flyType = random(1, 4); // 1 = rocketers, 2 = magical, 3 = dizzy, 4 = tired
    entityData.rocketers = [];
    entityData.magical = [random(1, 10)]; // amountBlocksAboveGround
    entityData.dizzy = [];
    entityData.tired = random(1, 4); // amountBlocksAboveGround
    listEntitys.push([entityId, entityData]); // push needed data into array
    clientMessage("added entity as " + entityData.flyType); // this prints undefined in Minecraft PE's chat box :/ 
}

感谢您的帮助!对象属性flyType基本上是未定义的,不知道其他对象是什么,但很可能也是未定义的。

1 个答案:

答案 0 :(得分:2)

entityData不是对象。这是一个数字。由于数字是原语,因此它不具有属性。因此,当您访问(读/写)其中一个属性时,会创建一个临时的,自动装箱的Number对象,并立即将其丢弃(在计算表达式之后)。

因此,在entityData上操作时,您不会访问同一个对象,而是访问不同的临时对象。

解决方案:将其变为适当的非原始对象:

var entityData = {};

如果你想要优雅,可以使用默认属性对其进行初始化,因为对象文字也允许:

var entityData = {
    flyType: random(1, 4),
    rocketers: [],
    magical: [ random(1, 10) ]
};