2017-01-10 5 views
0

Im пытаясь найти длину ключа report_data (объект), используя приведенную ниже code..but по некоторым причинам она дает значение 3.найти Javascript длину объекта

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

+0

Вы имеете в виду ключи от объекта json? – Beri

+4

'report_data' - это строка, а не объект –

+1

, даже если ее строка..WHy дает значение 3? – user1050619

ответ

6

a.report_data является строка с тремя свойствами:

  • 0, представляющий первый символ ("{").

  • 1, представляющий второй символ ("}").

  • и length, представляющий длину строки (2).

Это немного нелогичным, если вы пришли из других языков, что 0 и 1 являются свойствами, но в JavaScript, элементы массива являются свойства так же, как и все другие свойства, и «обычные» свойства можно получить с помощью синтаксис массива (так называемый «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"] 
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 из них.

Смежные вопросы