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