Javascript数组索引

时间:2013-03-30 21:55:50

标签: javascript

很抱歉问一个noob问题,但是我有一个阵列:

MyArray["2cd"]="blah1";
MyArray["3cx"]="blah3";
MyArray["8cz"]="blah2";

字符串myStr="2cd"; 然后我使用MyArray [myStr]来获取blah的值,如何获取我在对象/数组中访问的数字或者在这种情况下为0?

1 个答案:

答案 0 :(得分:3)

如果我可以在两行之间阅读,听起来你在想你发布的代码:

MyArray["2cd"] = "blah1";
MyArray["3cx"] = "blah3";
MyArray["8cz"] = "blah2";

将自动变为:

MyArray[0] = MyArray["2cd"] = "blah1";
MyArray[1] = MyArray["3cx"] = "blah3";
MyArray[2] = MyArray["8cz"] = "blah2";

因此您可以通过以下两种方式获取字符串"blah1"

var foo = MyArray[0];  // sets foo to "blah1"
var bar = MyArray["2cd"]  // also sets bar to "blah1"

但这不是JavaScript的工作方式。

您当然可以进行设置,以便您可以使用我的MyArray[0]MyArray["2cd"]来获取相同的值,但您必须在我的示例中明确地执行此操作。

你没有提到的一件事是你如何声明MyArray本身。是Array还是Object?也就是说,在您发布的代码之前,您是否创建了MyArray

var MyArray = {};  // or equivalently, var Array = new Object;

或:

var MyArray = [];  // or equivalently, var Array = new Array;

第一个示例创建Object,第二个示例创建Array

有点令人困惑的是,JavaScript同时具有这两种类型,在许多情况下,您可以在某种程度上互换使用。但是,当您在对象中使用任意(通常但不一定是非数字)键时,习惯使用Object,如您的示例所示。相反,当您主要使用严格的数字索引时,习惯使用Array

事实上,JavaScript的Array类型Object类型继承Array只是一个Object,还有一些额外的行为:

  • Array还有其他方法,例如.push()会将项目附加到数组中。

  • Array具有.length属性,当您使用.push()或直接array[123]分配添加元素时,或者当您删除元素时,该属性会自动更新.pop()或其他方法。

Fabrício指出,JavaScript没有的是一个“关联数组”,其行为与您在其他语言中的行为类似。它有对象,它有数组(继承自对象),你必须按照自己的条件处理每一个。