Здесь я задаюсь вопросом о том, сколько вложенных или внутренних объектов я могу определить в javascript
Нет указанного ограничения.
В случае инициализатора объектатакой как тот, который вы показали, в конце концов вы столкнетесь с какими-то ограничениями конкретного движка JavaScript, выполняющего код, например, вокруг его анализа / обработки инициализатора, но ничего не определено в спецификации.
Если вы строите объекты динамически самостоятельно, например, так:
// Don't run this code!
var obj = {};
while (true) {
obj.child = {};
obj = obj.child;
}
... нет никаких оснований полагать, что вы столкнетесь с чем-то другим, кроме ограничения памяти, связанного с количеством объектоввы создаете (не их вложение).
как узнать, сколько ключей объектов определено в js
В одном конкретном объекте вы можете получить массивего собственные (не унаследованные) свойства через Object.getOwnPropertyNames
и Object.getOwnPropertySymbols
, а затем length
массива.Чтобы выяснить, сколько свойств у объекта и , сколько объектов ссылаются на его свойства, вы должны использовать рекурсивный поиск, но остерегайтесь циклических структур.
Например:
const obj = {
a: {
b: {
c: {
}
}
}
};
function countProps(target, recursive = false) {
const ownProperties = [
...Object.getOwnPropertyNames(target),
...Object.getOwnPropertySymbols(target)
];
let count = ownProperties.length;
if (recursive) {
for (const key of ownProperties) {
const value = target[key];
if (value && typeof value === "object") {
count += countProps(value, true);
}
}
}
return count;
}
console.log(countProps(obj, true));