找到Javascript对象的长度

时间:2017-01-10 19:04:59

标签: javascript

我试图使用下面的代码找到report_data(object)键的长度。但由于某些原因,它产生的值为3。

a={report_freq: "daily", report_item_num: 2, report_num: 39, report_data: "{}"}
Object {report_freq: "daily", report_item_num: 2, report_num: 39, report_data: "{}"}
Object.getOwnPropertyNames(a.report_data).length
3

为了更清晰,我有了图像。

enter image description here

2 个答案:

答案 0 :(得分:6)

a.report_data是一个包含三个属性的字符串:

  • 0,代表第一个字符("{")。

  • 1,代表第二个字符("}")。

  • length,表示字符串的长度(2)。

如果你来自其他语言,01属性是一种反直觉,但在Javascript数组元素中属性就像所有其他属性一样,并且& #34;定期"可以使用数组语法(aka" bracket notation")来访问属性:

// "array elements"
a.report_data[0]        === "{";
a.report_data[1]        === "}";
// or...
a.report_data["0"]      === "{";
a.report_data["1"]      === "}";

// "normal" properties
a.report_data.length    === 2;
// or...
a.report_data["length"] === 2;

这些都是属性名称,因此,当您要求字符串的属性名称数组时,您会得到:

["0", "1", "length"]

答案 1 :(得分:0)

假设您想要实际字符串值的长度,那么您只想使用report_data.length,如下所示:

var a = {
  report_freq: "daily",
  report_item_num: 2,
  report_num: 39,
  report_data: "{}"
};

console.log(a.report_data.length)

您当前的代码包括:

Object.getOwnPropertyNames(a.report_data).length

如果查看Object.getOwnPropertyNames(obj)的文档,您会看到以下说明:

  

Object.getOwnPropertyNames()返回一个数组,其元素是与obj上直接找到的可枚举和不可枚举属性相对应的字符串。

因此,在这种情况下,Object.getOwnPropertyNames(a.report_data)返回一个包含字符串上找到的键的数组,并且恰好有3个。