Object的键名可以为未定义变量?
首先看下面的错误代码:
1public static const GLOBAL_INFO:String = 'global';
2_fightInfoQueue = {GLOBAL_INFO:[]};
3_currentInfoQueue = _fightInfoQueue[GLOBAL_INFO];
执行这段代码,_currentInfoQueue
的值应该会是一个数组么?不是,是 null
。
通过调试器,可以看到 _fightInfoQueue
中的这个唯一的元素的键名是字符串 GLOBAL_INFO
,不是我认为的 global
。如果希望上面的 _currentInfoQueue
得到正确的值,必须使用下面的语法:
1_currentInfoQueue = _fightInfoQueue.GLOBAL_INFO;
或者在定义的时候,使用下面的语法:
1_fightInfoQueue = {"global":[]};
那么究竟是怎么回事呢?我又做了个测试:
1var colors:Object = {RED:0xFF0000, GREEN:0x00FF00, BLUE:0x0000FF};
2for(var i:String in colors)
3{
4 trace(i + ':' + colors[i]);
5}
6trace('===============');
7trace(colors.RED);
8trace(colors.BLUE);
9trace(colors.GREEN);
在上面的代码中,RED、GREEN、BLUE都是没有定义的变量。
执行后的效果:
BLUE:255 RED:16711680 GREEN:65280
16711680 255 65280
也就是说,如果使用没有定义的变量作为Object的键名,那么AS会自动将这个变量转换成为字符串。同时,也可以使用这个未定义的名称来引用Object中的值。
不知是不是AS的BUG。
- 文章ID:1195
- 原文作者:zrong
- 原文链接:https://blog.zengrong.net/post/object-key-name-maybe-undefined/
- 版权声明:本作品采用 署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0) 进行许可,非商业转载请注明出处(原文作者,原文链接),商业转载请联系作者获得授权。