数组作为map返回错误的长度

时间:2016-07-25 05:55:01

标签: javascript arrays

我读过那个数组可以是map,那为什么它会给出错误的结果呢? 是否有简单的本地方式在JavaScript中使用map然后获取它的长度?

var f = [];
f["1_f_1"] = "1";
f["2_f_2"] = "2";
f["3_f_3"] = "3";

alert(f.length);

打印:0

https://jsfiddle.net/fd6s1z0j/

3 个答案:

答案 0 :(得分:5)

JavaScript不支持关联数组,因此在 Object.keys() 方法的帮助下,使用object并按属性名称数组大小获取大小。

function

答案 1 :(得分:2)

JavaScript中的数组只是一种特殊的对象。如果Array对象的键是有效的Array索引(正整数),那么它将被视为数组元素。引用specification

  

整数索引是一个字符串值属性键,它是一个规范数字字符串(见7.1.16),其数值为+0或正整数≤2 53 -1。数组索引是整数索引,其数值i在+0≤i<1的范围内。 2 32 -1。

在您的情况下,您将创建三个不是有效数组索引的新属性。这就是为什么它们不被视为数组元素,而只是数组对象的属性。

如果要存储这些字符串,则应将它们存储在Object中,如另一个答案中所示。

答案 2 :(得分:1)

JavaScript中没有count all enumerable properties found directly upon object。虽然,有一些具有命名属性的对象。通常所说的“关联数组”实际上只是Javascript中的一个对象。如果你想得到元素的长度,你需要Object.keys(obj).length 或者只需使用: -

registerClass