【问题标题】:Why is JSONObject.length undefined? [closed]为什么 JSONObject.length 未定义? [关闭]
【发布时间】:2013-09-26 15:51:50
【问题描述】:

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

【问题讨论】:

  • 欢迎来到 StackOverflow!让我给你一些关于如何让这个问题更好地让其他人回答的建议。首先,我很确定您缺少代码:您现在拥有的代码不会给出任何此类错误。其次,请格式化您的代码:您可以通过选择您的代码然后点击文本框上方图标栏中的“代码示例”按钮来完成此操作(看起来 Grammin 已经为您完成了此操作)。最后,确保您的问题包括代码示例、您遇到的错误和预期输出。请阅读How to Ask 了解更多信息。
  • "var JSONObject = ..." 这不是 JSON 对象,而是 JavaScript 对象。具体来说,它是一个 JavaScript 数组。 JSON 是一种文本数据交换符号。源代码不是 JSON。
  • 为什么关闭?虽然原始帖子的格式不正确,但问题是有效的,问题现在很清楚(JavaScript 对象没有继承 .length 属性)。
  • 被提名重新开放。 Google 把我带到了这里,我的问题得到了解答。
  • 其实经过进一步的审查,它应该作为stackoverflow.com/questions/22580223/get-length-of-json-object/…的副本关闭

标签: javascript json


【解决方案1】:

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

【讨论】:

  • 这将仅返回对象的 直接可枚举 属性的长度(不包括原型链上的可枚举)。顺便说一下,这可以写成(在现代 JS 中)Object.keys(obj).length
  • 或者考虑Object.keys(可枚举属性)或Object.getOwnPropertyNames(所有属性)
  • 本杰明太棒了,我喜欢。值得注意的是,它在 IE8 中不起作用,因此目前无法在没有 shims 的情况下使用。
【解决方案2】:

下面其实是一个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 属性。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-12
    • 2016-12-03
    • 2013-11-05
    • 1970-01-01
    • 2017-07-19
    • 2021-12-04
    相关资源
    最近更新 更多