- Object和Array之间有什么区别?我什么时候应该使用Array以及何时使用Object?
请举例 - 如何正确使用它们。
答案 0 :(得分:2)
当我们在ActionScript 3中讨论Object
时,请务必注意所有内容继承Object
并且一个vanilla Object
实例是{{ 1}}(意味着您可以自由地将数据附加到它而不在类定义中定义数据)。
您可以使用dynamic
或new Object()
对象文字语法初始化一个vanilla对象。
动态对象是{ }
存储,这意味着它存储了可用于稍后引用值的字符串的值。可以使用点表示法(key:value
)或方括号表示法(object.key
)以这种方式设置或检索值。两者之间的主要区别在于,使用方括号表示法,您可以:
所有这一切的完整示例如下:
object['key']
对象文字语法也能够接受var data:Object = { };
data.firstName = 'John';
data['lastName'] = 'Smith';
trace(data['firstName'] + ' ' + data.lastName); // John Smith
对,这意味着上面的内容可以简化为:
key:value
使用var data:Object = { firstName: 'John', lastName: 'Smith' };
循环实现对key:value
Object
商店的迭代:
for..in
请注意,基于上述内容,我们知道for(var prop:String in data)
{
trace(prop, data[prop]);
}
直接继承了Array
。 Object
课程也是Array
,这意味着您可以使用与dynamic
相同的key:value
存储空间。这就是它开始变得混乱的地方。
可以使用以下方法初始化数组:
Object
new Array()
数组文字语法。Array()
功能。数组能够存储顺序数据与任意值集合。虽然我们添加到上面[]
对象的值看似是顺序的,但实际上它们存储在无特定顺序中。
Arrays使用基于零的数字索引代替'keys'存储顺序数据,如下所示:
data
Arrays提供了处理从数组头部和尾部添加和删除元素的方法,如var array:Array = [];
array[0] = 'hello';
trace(array[0]); // hello
,push()
,pop()
和shift()
。数组也能够提供它们的unshift()
,表示该数组中元素的数量。
当你开始使用带数组的非数字键时会出现混淆:
length
我们实际上回到数组继承的array['prop'] = 10;
而不是向顺序列表中添加元素,而是添加一个值为Object
的任意prop
键。在这种情况下,我们在数组(字符串10
)中有一个项,并且附加到数组实例的名为hello
的动态属性本身(不在数组中)。
要迭代一系列项目,我们可以使用普通prop
循环或for
循环:
for each
重要的是要注意for(var index:int = 0; i < array.length; i++)
{
trace(array[index]);
}
// Or:
for each(var value:String in array)
{
trace(value);
}
循环仅在数组中的所有值与该循环的定义中使用的相同类型(在本例中为for each
)时才有效。 / p>
矢量是一种专门的顺序数据存储,它允许您通过定义将要存储的对象类型来从静态类型检查中受益。例如,我们可以使用以下语法创建String
个对象的列表:
Sprite
因为输入了Vectors,所以在列表中添加非Sprite值会给你一个编译时错误,从而节省了很多潜在的错误。向量还提供比数组更快的读写访问。
答案 1 :(得分:1)
数组用于数字访问,并且从零开始(0是第一个元素)
var array:Array = new Array("a", "b", "c");
array[0] = "z"; // change first element to z
array.push("d"); // add d to end
trace(array[3]) // output: d
trace(array) // output: z,b,c,d
可以循环播放数组。
for (var i:int = 0; i < array.length; i++)
{
trace(array[i]);
}
对象可用于各种事物。与Array相比,它可以允许关联数组(使用键而不是整数的字符串)
var assocArray:Object = {me:"Mike", you:"Gabriel"};
// property-style access
trace( assocArray.me ) // output Mike
// access with string
trace( assocArray["you"] ) // Gabriel