Каков наилучший способ получить / установить глубокое свойство объектов в Javascript?

Общеизвестно раздражает получение более глубокого свойства от объекта. Если родитель не существует, вы получите ошибку. Таким образом, вам нужно прекратить попадать в собственность, когда родитель не существует.

Невежественный способ сделать это:

if (parent.value && parent.value.subvalue && parent.value.subvalue.targetvalue)
    var myVal = parent.value.subvalue.targetvalue;
else
    var myVal = null;

Когда вам часто нужно получить свойство, это нереально, и вам нужна функция быстрого доступа. Сначала я сделал что-то вроде этого:

function getProp(path) {
    try {
        return eval(path);
    }
    catch (e) {
        return null;
    }
};
// getProp('parent.value.subvalue.targetvalue');

Но это неубедительно по крайней мере по двум причинам: объект должен находиться в области видимости, и никто не любит использоватьeval().

Поэтому, возможно, лучше применить объект к функции:

function getProp(path, parent) {
    path = path.split('.');

    var val = parent;

    for (var k = 0; k < path.length; k++) {
        var key = path[k];

        try {
            val = val[key];
        }
        catch (e) {
            return null;
        }
    }

    return val;
};
// getProp('value.subvalue.targetvalue', parent);

Но так или иначе это все еще не чувствует себя правильным.
Как ты это делаешь? Что такое лучшая практика?

Задание объектов, глубокое свойство которых родители могут или не могут существовать, еще более раздражает.

parent = parent || {};
parent.value = parent.value || {};
parent.value.subvalue = parent.value.subvalue || {};
parent.value.subvalue.target = "YAY SOME VALUE!"

Как бы вы справились с этим красиво?

Существуют ли для этого нативные функции javascript, так как это нужно делать часто?

Ответы на вопрос(2)

Ваш ответ на вопрос