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 ответ:
Вы можете поставить охрану:
Вышеизложенное защищает от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
.
||
являетсяудивительно мощным подобным образом.