遍历对象键时,为什么键会转换为新数字?

When looping through object keys, why does the key get converted to a new number?

我有问题,请看这段代码:

#SingleInstance, Force
SetBatchLines, -1
CoordMode, Pixel, screen

FileDelete, Log.txt

listObject := {}
listObject[4280361510] := true

for index1 in listObject
{
    FileAppend, % "Item: " . index1 . "`n", Log.txt
}

打印到文件:

Item: -14605786

我希望打印的位置:

Item: 4280361510

为什么我分配的索引是4280361510时属性显示为-14605786

还有:

if (listObject[4280361510]) {
    FileAppend, % "But 4280361510 still works. `n", Log.txt
}

if (listObject[-14605786]) {
    FileAppend, % "And -14605786 works too. `n", Log.txt
}

打印到文件:

But 4280361510 still works. 
And -14605786 works too. 

为什么这两个属性的行为就好像它们已分配给对象一样?

4280361510-14605786 是相同的数字 - 在 32 位算术中。带符号的 32 位数字回绕并在大约 20 亿时变为负数 (231)。这个数字几乎已经第二次回绕了,在这种情况下它会再次变为正数。