Javascript数组索引

Javascript数组索引,javascript,Javascript,很抱歉问了一个noob问题,但如果我有一个数组: MyArray["2cd"]="blah1"; MyArray["3cx"]="blah3"; MyArray["8cz"]="blah2"; 和一个字符串myStr=“2cd” 然后我使用MyArray[myStr]来获取blah的值,我如何才能获得我在对象/数组中访问的数字,或者在这种情况下是0?如果我可以从字里行间看出,听起来你好像认为你发布的代码: MyArray["2cd"] = "blah1"; MyArray["3cx"] = "

很抱歉问了一个noob问题,但如果我有一个数组:

MyArray["2cd"]="blah1";
MyArray["3cx"]="blah3";
MyArray["8cz"]="blah2";
和一个字符串
myStr=“2cd”

然后我使用MyArray[myStr]来获取blah的值,我如何才能获得我在对象/数组中访问的数字,或者在这种情况下是0?

如果我可以从字里行间看出,听起来你好像认为你发布的代码:

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不是这样工作的

您当然可以进行设置,这样就可以使用my
MyArray[0]
和MyArray[“2cd”]
来获取相同的值,但您必须像我的示例中那样显式地执行此操作

您没有提到的一件事是如何声明MyArray本身。它是一个
数组
还是一个
对象
?也就是说,在发布代码之前,您是否使用以下工具创建了
MyArray

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

第一个示例创建一个
对象
,第二个示例创建一个
数组

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

事实上,JavaScript的
数组
类型继承自
对象
类型。
数组
只是一个具有一些附加行为的
对象

  • 数组
    具有附加方法,例如将项附加到数组的
    .push()

  • 数组
    具有一个
    .length
    属性,当您使用
    .push()
    或直接
    数组[123]
    赋值添加元素,或使用
    .pop()
    或其他方法删除元素时,该属性会自动更新


正如法布里西奥所指出的,JavaScript所没有的是一个“关联数组”,它的行为类似于您在其他一些语言中可能发现的行为。它有对象和数组(从对象继承),你必须根据它们各自的术语来处理它们。

你可以从明确JS中没有关联数组开始。绝对!谢谢你提到那件事。我在商场等女儿的时候发了我的手机回复,所以有点简洁。现在我手边有了键盘,我详细阐述了数组和对象的区别。索引是一个数字。如果cd是一个数字,或者需要parseInt(“2cd”,10),则可以访问MyArray[0]或MyArray[cd],这将返回2,也可以访问MyArray[2]。“索引”是一个数字字符串(例如“0”、“1”、“2”)。对于OP,javascript数组只是具有特殊长度属性和从Array.prototype继承的方法的普通对象。因此,您可以像使用对象一样使用数组(不喜欢,但效果很好)。许多数组方法都是通用的,可以在具有适当属性的普通对象上使用。我根据您给出的示例创建了一个JSFIDLE演示:
var MyArray = [];  // or equivalently, var Array = new Array;