为什么JSONObject.length未定义?

时间:2013-09-26 15:51:50

标签: javascript json

在下面的代码中,JSONObject.length是2:

var JSONObject = [{
    "name": "John Johnson",
    "street": "Oslo West 16",
    "age": 33,
    "phone": "555 1234567"
}, {
    "name": "John Johnson",
    "street": "Oslo West 16",
    "age": 33,
    "phone": "555 1234567"
}];

但是,在下面的代码中,JSONObject.length未定义。为什么呢?

var JSONObject = {
    "name": "John Johnson",
    "street": "Oslo West 16",
    "age": 33,
    "phone": "555 1234567"
};

2 个答案:

答案 0 :(得分:17)

JavaScript没有对象的.length属性。如果你想要解决它,你必须手动迭代对象。

function objLength(obj){
  var i=0;
  for (var x in obj){
    if(obj.hasOwnProperty(x)){
      i++;
    }
  } 
  return i;
}


alert(objLength(JSONObject)); //returns 4

修改

Javascript已经移动了,因为这是最初编写的,IE8是无关紧要的,你应该感到安全使用Object.keys(JSONObject).length。更干净。

答案 1 :(得分:4)

以下实际上是一个JSON对象数组 :

var JSONObject = [{ "name":"John Johnson", "street":"Oslo West 16", "age":33,
"phone":"555 1234567"}, {"name":"John Johnson", "street":"Oslo West 16", 
"age":33, "phone":"555 1234567" }];

因此,在JavaScript中,length是数组的属性。在你的第二种情况下,即

var JSONObject = {"name":"John Johnson", "street":"Oslo West 16", "age":33, 
"phone":"555 1234567"};

JSON对象不是数组。因此,长度属性不可用,并且将是未定义的。所以你可以把它作为一个数组,如下所示:

var JSONObject = [{"name":"John Johnson", "street":"Oslo West 16", "age":33, 
"phone":"555 1234567"}];

或者如果您已经有对象说JSONObject。您可以尝试以下操作:

var JSONObject = {"name":"John Johnson", "street":"Oslo West 16", "age":33, 
"phone":"555 1234567"};
var jsonObjArray = []; // = new Array();
jsonObjArray.push(JSONObject);

你得到了length财产。