Каков краткий и надежный способ написать эти утверждения в JavaScript? - PullRequest
0 голосов
/ 12 ноября 2009

У меня есть

Прежде всего, является ли этот оператор троичного оператора действительным и эффективным для того, что я хочу сделать? Здесь есть потенциальные ловушки?

parent.settings.account ? var account = parent.settings.account : error();

Во-вторых, есть ли более краткий способ написать это утверждение?

Некоторые из этих переменных являются необязательными, но, если они определены, имеют диапазон допустимых значений. Какой надежный способ справиться с этим? Как то так?

if (parent.settings.polling_interval && parent.settings.polling_interval >= 1000 && parent.settings.polling_interval <= 5000) {
    var polling_interval = parent.settings.polling_interval;
} else {
  var polling_interval = 3000; // default
}

Обычно, если он не определен или находится вне диапазона, я хочу использовать значение по умолчанию.

Могу ли я полагаться только на условное утверждение, подобное:

if (parent.settings.polling_interval) { ... }

или мне нужно проверить, не определено ли оно, как это?

if (typeof parent.settings.polling_interval !== 'undefined') { ... }

Есть ли что-то более надежное и / или сжатое? Спасибо за любой совет.

Ответы [ 3 ]

4 голосов
/ 12 ноября 2009

Это неправильно:

parent.settings.account ? var account = parent.settings.account : error();

Ты хотел сказать:

var account = parent.settings.account ? parent.settings.account : error();

Или даже:

var account = parent.settings.account || error();
1 голос
/ 12 ноября 2009

[1]

parent.settings.account ? ( var account = parent.settings.account ) : error();

Это вызовет ошибку SyntaxError, поскольку вы не можете определить переменную таким образом.

Если error() вызывает исключение / выдает ошибку, вы можете сделать:

    if ( !parent.settings.account ) {
        error()
    }

// continue code

Как указывалось ранее, вы также можете присвоить переменную свойству:

var account = parent.settings.account || error();

[2]

  var pollingInterval = parent.settings.polling_interval &&
 parent.settings.polling_interval >= 1000 &&
 parent.settings.polling_interval <= 5000 ?
 parent.settings.polling_interval : 3000;

[3] Вы можете использовать if ( parent.foo ), и если foo не определено, строгая ошибка не будет выдана, но она будет просто равна неопределенной, при условии, что родитель всегда определен.

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

if ( parent.settings.polling_interval ) { }

Было бы полезно указать, что на самом деле делает error() 1024 *.

1 голос
/ 12 ноября 2009
var account = parent.settings.account;
if (!account)
    error();

if ((p = parent.settings.polling_interval) && p >= 1000 && p <= 5000) {
   ...
}

var polling_interval = (p = parent.settings.polling_interval) && p >= 1000 && p <= 5000 ? p : 3000;
...