我试图使用下面的代码找到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
为了更清晰,我有了图像。
答案 0 :(得分:6)
a.report_data
是一个包含三个属性的字符串:
0
,代表第一个字符("{"
)。
1
,代表第二个字符("}"
)。
和length
,表示字符串的长度(2
)。
如果你来自其他语言,0
和1
属性是一种反直觉,但在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个。