Javascript: проверка длины дочернего массива объекта, даже если объект не определен


Я хотел бы отображать некоторый контент только в том случае, если дочерний массив объекта содержит элементы в нем. Но иногда сам объект не определен, поэтому это не удается, если object или object.child не присутствует в области:

if(object.child.length){
    alert('hello world');
}

В результате чего:

Uncaught ReferenceError: object is not defined

Поэтому я должен добавить два дополнительных условия if, чтобы проверить, определен ли объект и его потомок:

if(typeof object !== 'undefined'){
    if(typeof object.child !== 'undefined'){
        if(object.child.length){
            alert('hello world');
        }
    }
}

Написать функцию вокруг этого тоже проблематично:

function isset(value){ ... }
if(isset(object.child.length)({ ... } // <-- still raises error that object is not defined
Есть ли более чистый и короткий способ сделать это? вот это?
1 4

1 ответ:

Вы можете поставить охрану:

if(object && object.child && object.child.length){
Вышеизложенное защищает от object и object.child бытия undefined или null (или любого другого ложного значения); это работает, потому что все ссылки на не-null объекты истинны, поэтому вы можете избежать многословной формы typeof object !== "undefined". Возможно, Вам не понадобятся оба вышеперечисленных охранника, если вы точно знаете, что object.child будет существовать, если object существует. Но иметь и то и другое безвредно. Стоит отметить, что это полезно даже при извлечении значений, а не только для их тестирования. Например, предположим, у вас есть (А может, и нет!) object.foo, который содержит значение, которое вы хотите использовать.
var f = object && object.foo;

Если object является falsey (undefined или null являются типичными случаями), то f получит это значение falsey (undefined или null). Если object истинно, то f получит значение object.foo.

|| являетсяудивительно мощным подобным образом.