13

在下面的代码中,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"
};
4

2 回答 2

19

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。干净多了。

于 2013-09-26T16:01:16.997 回答
5

以下实际上是一个 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 中,长度是数组的一个属性。在你的第二种情况下,即

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了财产。

于 2013-09-26T16:33:56.507 回答