关于数组:在javascript中未定义Object.length

Object.length undefined in javascript

本问题已经有最佳答案,请猛点这里访问。

我有一个数组的javascript对象,比如,

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
var coordinates = {
    "a": [
         [1, 2],
         [8, 9],
         [3, 5],
         [6, 1]
     ],

        "b": [
         [5, 8],
         [2, 4],
         [6, 8],
         [1, 9]
     ]
 };

coordinates.length返回未定义。Fiddle在这里。


因为coordinatesObject而不是Array使用for..in

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
var coordinates = {
    "a": [
         [1, 2],
         [8, 9],
         [3, 5],
         [6, 1]
     ],

    "b": [
         [5, 8],
         [2, 4],
         [6, 8],
         [1, 9]
     ]
 };

for (var i in coordinates) {
  console.log(coordinates[i])
}

Object.keys

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
var coordinates = {
 "a": [
    [1, 2],
    [8, 9],
    [3, 5],
    [6, 1]
  ],

 "b": [
    [5, 8],
    [2, 4],
    [6, 8],
    [1, 9]
  ]
};

var keys = Object.keys(coordinates);

for (var i = 0, len = keys.length; i < len; i++) {
  console.log(coordinates[keys[i]]);
}

coordinates是一个对象。默认情况下,javascript中的对象不具有length属性。某些对象具有长度属性:

1
2
3
4
5
"a string - length is the number of characters".length

['an array', 'length is the number of elements'].length

(function(a, b) {"a function - length is the number of parameters" }).length

您可能试图在您的对象中找到keys的数量,这可以通过Object.keys()完成:

1
var keyCount = Object.keys(coordinates).length;

小心,因为length属性可以添加到任何对象中:

1
var confusingObject = { length: 100 };


http://jsfiddle.net/3wzb7jen/2/

1
 alert(Object.keys(coordinates).length);