找到Javascript对象的长度

use*_*619 0 javascript

我试图使用下面的代码找到report_data(对象)键的长度..但由于某些原因它产生值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
Run Code Online (Sandbox Code Playgroud)

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

在此输入图像描述

JDB*_*JDB 6

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

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

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

  • 并且length,表示字符串(2)的长度.

这是一个有点反直觉的,如果你来自其他语言,这01是属性,但在Javascript数组的元素属性,就像所有其他属性,而"常规"属性可以使用数组语法(又名"访问括号标记 ") :

// "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;
Run Code Online (Sandbox Code Playgroud)

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

["0", "1", "length"]
Run Code Online (Sandbox Code Playgroud)