Javascript 我的关联数组不存储对象

Javascript 我的关联数组不存储对象,javascript,arrays,Javascript,Arrays,似乎总是空的: var idStruttura=2; var arrayMarkers=new Array(); arrayMarkers["sede_"+idStruttura] = "ciao"; alert(arrayMarkers.length); 打印始终为0。为什么?如何修复它呢?javascript中的数组(与php不同)不能有字符串键,只能有数字键。如果您想要字符串文字作为键,请使用对象。您需要的是一个简单的对象,而不是数组。数组具有数字索引 var markers = {}

似乎总是空的:

var idStruttura=2;
var arrayMarkers=new Array();

arrayMarkers["sede_"+idStruttura] = "ciao";
alert(arrayMarkers.length);

打印始终为0。为什么?如何修复它呢?

javascript中的数组(与php不同)不能有字符串键,只能有数字键。如果您想要字符串文字作为键,请使用对象。您需要的是一个简单的对象,而不是数组。数组具有数字索引

var markers = {};
markers['sede_' + id] = 'ciao';

还要注意的是,
{}
新对象()
相同,
[]
新数组()
相同。总是使用前一个。这对任何JS开发人员来说都非常清楚。

您创建的是一个常规数组对象,并在其中添加了一个名为
sede\ux…
的属性。JavaScript不像PHP那样使用关联数组。数组是可以具有属性的对象,但这些属性不在数字索引数组元素中

var idStruttura=2;
var arrayMarkers=new Array();

// Push an object onto the array having one property:
arrayMarkers.push({"sede_" + idStruttura : "ciao"});

// Or declare it as an object to begin with:
// This makes more sense....
var objMarkers = {};
objMarkers['sede_' + id] = 'ciao';

存储对象时没有长度,只有在按预期使用数组时才有长度

试试这个()


阵列不是关联阵列,但是阵列对象是对象,并且所有对象都是关联阵列。如果将项分配给数组时使用字符串作为键,则不是将其用作数组,而是将其用作对象


数组的
length
属性返回您在数组中存储了多少项。如果还将数组对象用作关联数组,则不会影响将数组用作数组的方式。

@markzzz它可以工作,因为您已使用该名称向数组对象添加了属性。它不是数组元素的一部分,就像您用
迭代(i=0;i@markzzz您添加的属性更类似于
array.length
属性,该属性包含有关数组的其他信息。是的。
array
也是一个
对象
。例如,这与PHP不同。您可以设置
array
实例的任何成员属性,但它不会影响
length
属性。只要记住JavaScript
数组
具有用于数字索引的内容。嗯!所以我想我不能用.lenght=0清除这个对象。我如何才能清除它?不,你不能。你必须循环它的键并使用
delete
语句。
for(obj中的var key){if(obj.hasOwnProperty(key)){delete obj[key];}}}
arrayMarkers={};也会破坏它吗?是的,当然也可以。只需确保在应用程序的其他地方没有对原始对象的任何引用。但这不是你所要求的。
var idStruttura=2;
var arrayMarkers={}; // creates a more appropriate object than []

arrayMarkers["sede_"+idStruttura] = "ciao";
arrayMarkers["sede_"+(++idStruttura)] = "espresso";
var len = 0;
for (var o in arrayMarkers) {
    if (arrayMarkers.hasOwnProperty(o)) len++;
}
arrayMarkers.length=len
alert(arrayMarkers.length)