Javascript: есть ли причина делать «если (! A || (a && a.a))»? - PullRequest
1 голос
/ 24 октября 2011

Есть ли для этого особая причина:

if (!options || (options && options.booleanCondition))

Вместо:

if (!options || options.booleanCondition) 

Я не гуру javascript, поэтому, возможно, есть особый случай или причина, по которой авторэтого кода написал это так.

Ответы [ 3 ]

1 голос
/ 24 октября 2011

Не вижу смысла делать

if (!options || (options && options.booleanCondition))

Я не Гуру, но я бы придерживался

if (!options || options.booleanCondition) 

и сохраните проверку для факта, что параметры верны: на самом деле, если options не соответствует действительности, первое условие равно true, а второе никогда не оценивается, так как это условие or.

Это то, что я думаю

1 голос
/ 24 октября 2011

Возможно, он использует геттер.Это смешной пример, но он может быть причиной:

var o = {};
var i = 0;

o.__defineGetter__('options', function() {
    return (i++) % 2 === 0 ? {booleanCondition: true} : null;
});

o.options; // Object first time
o.options; // null second time

Это означает:

if (!o.options || (o.options && o.options.booleanCondition))

!o.options равно false (отрицание объекта), но после этого o.options равно null (ложно), поэтому проверка обязательна.

0 голосов
/ 24 октября 2011

если options.booleanCondition может измениться, то да. Если options равен false, тогда условие If будет истинным. Если options равен true, а boolean.Condition - false, тогда условие If будет false. Если для параметра установлено значение true, а для параметра boolean.Condition установлено значение true, то условие If будет иметь значение true.

UPDATE

На самом деле, я полагаю, что в этом не было бы необходимости - поскольку ваше упрощение было бы (если! True или true), если параметры имеют значение true, поэтому результат будет таким же, как (если true или true).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...