2014-10-05 2 views
3

Я обновляю существующее приложение JavaScript. Часть этого обновления включает в себя форматирование вещей и очистку кода.Правильный JavaScript IF Else Синтаксис

Сейчас это одна из функций, которая использует if() и else заявления без всех правильных скобках на месте ... Я personbally ненавижу, когда люди делают этот метод стенографии и даже более того, когда они смешиваются и использовать его иногда а не другие. Вот пример этого кода ниже.

this.setFlags = function() { 
    if (document.documentElement) 
     this.dataCode = 3; 
    else 
    if (document.body && typeof document.body.scrollTop != 'undefined') 
     this.dataCode = 2; 
    else 
    if (this.e && this.e.pageX != 'undefined') 
     this.dataCode = 1; 

    this.initialised = true; 
} 

Я честно не знаю, как правильно добавить скобки к этой функции, ниже того, что у меня есть, но я имею в виду, это не может быть правильным. Может ли эксперт JavaScript сообщить мне об этом?

this.setFlags = function() { 
    if (document.documentElement){ 
     this.dataCode = 3; 
    }else{ 
     if (document.body && typeof document.body.scrollTop != 'undefined'){ 
      this.dataCode = 2; 
     }else{ 
      if (this.e && this.e.pageX != 'undefined'){ 
       this.dataCode = 1; 
      } 
     } 
    } 

    this.initialised = true; 
} 
+0

Это правильно. Поздравляем с правильной добавлением скобок. Это ваш единственный вопрос? –

+0

Оба прекрасно, когда вам нужно написать только одну строку в 'if', нет необходимости ставить' {} '. – Mritunjay

+1

не использует {} на одной строке, если случаи/условия часто считаются плохой практикой, потому что ошибки могут скрываться на виду, если у вас плохое отступы. http://stackoverflow.com/questions/4797286/are-curly-braces-necessary-in-one-line-statements-in-javascript –

ответ

8

Я разделяю вашу нелюбовь к неустановленным if/else заявлениям. Ваш брекетинг кажется мне правильным. Однако, есть более простой способ, что эквивалентно:

this.setFlags = function() { 
    if (document.documentElement) { 
     this.dataCode = 3; 
    } else if (document.body && typeof document.body.scrollTop != 'undefined') { 
     this.dataCode = 2; 
    } else if (this.e && this.e.pageX != 'undefined') { 
     this.dataCode = 1; 
    } 

    this.initialised = true; 
} 

Как Дэйв Чен указывает на комментарий, из-за простоты и параллельности if/else ветвей — все они присвоить значение this.dataCode — вы можете также использовать вложенную тройного операторы:

this.setFlags = function() { 
    this.dataCode = document.documentElement       ? 3 
        : document.body 
         && typeof document.body.scrollTop != 'undefined' ? 2 
        : this.e && this.e.pageX != 'undefined'    ? 1 
        :              this.dataCode; 

    this.initialised = true; 
} 

преимущество этого в том, что это ясно, что все условия просто определить, какое значение присвоить this.dataCode. Недостаток (на мой взгляд, большой) заключается в том, что, если вложенные троичные операторы не будут отформатированы осторожно (например, что я здесь сделал), в принципе невозможно понять, что происходит, не тщательно изучая выражение. К сожалению, большинство форматировщиков кода JavaScript, с которыми я знаком, очень плохо выполняют форматирование таких выражений (или сохранение такого форматирования). (Интересно, что несколько форматтеры Perl, что я использовал сделать замечательную работу этого Но это не Perl.).

+1

Вы также можете использовать тройной, но я не думаю, что это то, о чем спрашивает ОП , Вопрос не в том, «Как я могу сделать этот код лучше?». –

+0

@DaveChen - Да, это еще одна возможность. Я добавлю это к моему ответу. Благодарю. –

+0

Это здорово, я знаю, что это был супер базовый вопрос, но так, как он был отформатирован, мне было не все так ясно, спасибо и да, улучшения всегда приветствуются! – JasonDavis

1

Это правильно, но вы можете сделать это аккуратнее:

this.setFlags = function() { 
    if (document.documentElement) { 
    this.dataCode = 3; 
    } else if (document.body && typeof document.body.scrollTop != 'undefined') { 
    this.dataCode = 2; 
    } else if (this.e && this.e.pageX != 'undefined') { 
    this.dataCode = 1; 
    } 

this.initialized = true; 
}; 

ой это уже

Смежные вопросы