Actionscript 3 ActionScript3 |对象或数组

Actionscript 3 ActionScript3 |对象或数组,actionscript-3,actionscript,Actionscript 3,Actionscript,对象和数组之间的区别是什么?我应该何时使用数组以及何时使用对象 请给出示例-如何正确使用它们。数组用于数字访问,并且是基于零的(0是第一个元素) 数组可以循环通过 for (var i:int = 0; i < array.length; i++) { trace(array[i]); } 当我们在ActionScript3中讨论对象时,需要注意的是,所有内容都继承对象,并且普通的对象实例是动态的(这意味着您可以自由地将数据附加到它,而无需在类定义中定义该数据) 您可以使用

对象和数组之间的区别是什么?我应该何时使用数组以及何时使用对象


请给出示例-如何正确使用它们。

数组用于数字访问,并且是基于零的(0是第一个元素)

数组可以循环通过

for (var i:int = 0; i < array.length; i++) 
{ 
    trace(array[i]); 
}
当我们在ActionScript3中讨论
对象时,需要注意的是,所有内容都继承
对象
,并且普通的
对象
实例是
动态的
(这意味着您可以自由地将数据附加到它,而无需在类定义中定义该数据)

您可以使用
newobject()
{}
对象文字语法初始化普通对象

动态对象是一个
key:value
store,这意味着它根据字符串存储值,这些字符串可用于以后引用值。可以使用点符号(
object.key
)或方括号符号(
object['key']
)以这种方式设置或检索值。两者之间的主要区别在于,使用方括号表示法,您可以:

  • 使用动态键获取或设置值(例如,在构建字符串、解析列出属性的文件等之后)
  • 具有包含非法字符(如空格)的键
所有这些的完整示例如下:

var data:Object = { };

data.firstName = 'John';
data['lastName'] = 'Smith';

trace(data['firstName'] + ' ' + data.lastName); // John Smith
object literal语法也可以接受
key:value
对,这意味着上述内容可以简化为:

var data:Object = { firstName: 'John', lastName: 'Smith' };
使用
for..in
循环实现对
对象
存储的
键的迭代:

for(var prop:String in data)
{
    trace(prop, data[prop]);
}
for(var index:int = 0; i < array.length; i++)
{
    trace(array[index]);
}

// Or:

for each(var value:String in array)
{
    trace(value);
}
请注意,基于以上内容,我们知道
数组
直接继承
对象
数组
类也是
动态的
,这意味着您可以使用与
对象
相同的
键:值
存储。这就是它开始混淆的地方

可以使用以下方法初始化阵列:

  • new Array()
  • []
    数组文字语法
  • 顶层函数
数组能够存储顺序数据,而不是任意的值集合。虽然我们添加到上面的
data
对象中的值看起来是顺序的,但它们实际上并没有按特定顺序存储

数组使用基于零的数字索引代替“键”存储顺序数据,如下所示:

var array:Array = [];
array[0] = 'hello';

trace(array[0]); // hello
数组提供了从数组的头部和尾部添加和删除元素的方法,如
push()
pop()
shift()
unshift()
。数组还可以提供其
长度,表示该数组中的元素数


当您开始对数组使用非数字键时,会出现混淆:

array['prop'] = 10;
我们实际上没有向顺序列表添加元素,而是返回数组从属性继承的
对象
,添加一个值为
10
的任意
prop
键。在这种情况下,数组中有一个项(字符串
hello
),以及附加到数组实例本身(不在数组中)的名为
prop
的动态属性

要在项目数组上迭代,我们可以使用正常的
for
循环或
for each
循环:

for(var prop:String in data)
{
    trace(prop, data[prop]);
}
for(var index:int = 0; i < array.length; i++)
{
    trace(array[index]);
}

// Or:

for each(var value:String in array)
{
    trace(value);
}

由于向量是类型化的,因此在列表中添加非Sprite值将导致编译时错误,从而节省大量潜在的错误。向量还提供比数组更快的读写访问速度。

当您开始对数组使用非数字键时,会出现混淆:–有人会故意这样做吗?我可以想到它的一些黑客用途,但这是非常不恰当的。@如果你来自数组工作方式不同的背景(例如PHP),那么你可能最终会遇到这种情况。
var sprites:Vector.<Sprite> = new <Sprite>[];