1

在游戏Screeps中,我遇到了一些内置函数的返回类型的问题。采取以下代码:

var creeps1 = Game.creeps
var room = Game.rooms[myRoomName];
var creeps2 = room.find(FIND_CREEPS);

console.log(creeps1.constructor.name);
console.log(creeps1 instanceof Array);

console.log(creeps2.constructor.name);
console.log(creeps2 instanceof Array);

console.log([].constructor.name);
console.log([] instanceof Array);

你会期望这些都是数组,所以都是Array. 然而,在世界游戏中,我得到以下结果(myRoomName设置为我可以访问的房间的名称):

// Results in world
[1:11:11 AM] Object
[1:11:11 AM] false
[1:11:11 AM] Array
[1:11:11 AM] false
[1:11:11 AM] Array
[1:11:11 AM] true

但是等等,它变得更奇怪了。当我在模拟中运行相同的代码时(这次myRoomName'sim'),我得到以下结果:

// Results in simulation
[1:11:11 AM] Object
[1:11:11 AM] false
[1:11:11 AM] Array
[1:11:11 AM] true
[1:11:11 AM] Array
[1:11:11 AM] true

为什么不是所有这些函数都返回 的实例ArrayArray世界环境中怎么会有不同的版本?有没有办法将结果转换为实例Array

4

1 回答 1

1

Game.creeps 不返回一个数组,它返回一个行为为哈希的对象,其中creep 名称是键,creep 是值。这在Game.creeps 的 API 中有记录。如果您需要将其放在数组中,则可以遍历对象并将条目附加到数组中。

至于为什么crees2 instanceof在模拟和实际游戏中的不同,很难说。但是, Array.isArray(creeps2) 似乎在两种环境之间表现一致(在两种情况下都返回 true)。

于 2016-07-13T05:15:47.733 回答