用大数字作为数组的键名的坑

Post a reply

Confirmation code
Enter the code exactly as it appears. All letters are case insensitive.
Smilies
:D :) ;) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :!: :?: :idea: :| :mrgreen: :geek: :ugeek: :arrow: :angel: :clap: :crazy: :eh: :lolno: :problem: :shh: :shifty: :sick: :silent: :think: :thumbup: :thumbdown: :salute: :wave: :wtf: :yawn: :facepalm: :bravo: :dance: :beard: :morebeard: :xmas: :HeHe: :trollface: :cookie: :rainbow: :monkeysee: :monkeysay: :happybday: :headwall: :offtopic: :superhappy: :terms: :beer:
View more smilies

BBCode is ON
[img] is OFF
[flash] is OFF
[url] is ON
Smilies are ON

Topic review
   

Expand view Topic review: 用大数字作为数组的键名的坑

Re: 用大数字作为数组的键名的坑

Post by tmplinshi » 14 Nov 2017, 10:18

Oh, thank you jeeswg! This is exactly the document I was looking for.

@xuezhe 我猜测会有相应的文档说明,jeeswg帮忙找出来了 :)

Re: 用大数字作为数组的键名的坑

Post by jeeswg » 14 Nov 2017, 07:45

Objects
https://autohotkey.com/docs/Objects.htm
•Integer keys are stored using the native signed integer type. AutoHotkey 32-bit supports integer keys in the range -2147483648 to 2147483647. AutoHotkey supports 64-bit integers, but only AutoHotkey 64-bit supports the full range as keys in an object.

Objects
https://lexikos.github.io/v2/docs/Objects.htm
•Integer keys are stored using the native signed integer type where possible. Integers which are less than -2147483648 or greater than 2147483647 are stored as strings on AutoHotkey 32-bit but as integers on AutoHotkey 64-bit. (By contrast, 64-bit integers can be stored as values on either version.)

Cheers. 干杯。

Re: 用大数字作为数组的键名的坑

Post by xuezhe » 14 Nov 2017, 03:46

这是漏洞吗。最好报告给ahk作者呀。这是L V1 的漏洞,估计作者也不升级了。

我用V2运行结果正常,没有上面的问题。

Code: [Select all] [Expand]GeSHi © Codebox Plus

用大数字作为数组的键名的坑

Post by tmplinshi » 14 Nov 2017, 00:31

Code: [Select all]GeSHi © Codebox Plus

n := "448045523405"
obj := {}
obj[n] := "abc"

MsgBox, % obj[n] ; 结果为 abc,正常。

for k, v in obj
MsgBox, % k "=" v ; 但是这里显示的是 1368924621=abc


Code: [Select all] [Expand]GeSHi © Codebox Plus



解决方法:键名前面加上非数字,或者键名两边加引号

Code: [Select all] [Expand]GeSHi © Codebox Plus


Top