JavaScript без кода и стиль кода?

Я пытаюсь решить, стоит ли использовать JavaScript с точкой с запятой.

Если у меня есть код JavaScript без точки с запятой:

function(){
    var first = 1
    var second = 2
    sum = 1 + 2
    return sum
}

он будет работать в браузере и Node.js.

Но будет уменьшен (по Uglify или Closure Compiler) работает код в браузере и Node.js?

Я прочитал статью Точки с запятой в JavaScript являются необязательными. он говорит, что он должен работать.

Ответы

Ответ 1

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

Если вы идете на скромный подход с точкой с запятой, убедитесь, что вы и ваша команда правильно поняли автоматическую точку с запятой (ASI) и инструкцию правила прекращения. Это определенно хорошая вещь, чтобы понять, каково ваше решение.

Что касается минимизации: если вы не хотите рисковать потенциальной головной болью ошибки minifier и связанного с ней бремени отчетности и исправления (или ожидая исправления), поскольку он не выполняет ASI правильно, тогда не полагайтесь на ASI.

Ответ 2

Несмотря на то, что точки с запятой в JavaScript являются необязательными, существуют сильные советы против использования точек с запятой:

  • Это делает ваш код уязвимым для ошибок , возникающих в результате удаления пробелов (используется при минифинировании): Попробуйте следующее:

    var a = 1; var b = 7; var sum = a + b (a + b)

он уменьшает до var a=1,b=7,sum=a+b(a+b);,, что приведет к ошибке number is not a function. Существуют также другие случаи и этот случай.

Обновить. Эта ошибка не была вызвана минимизацией, но следующая:

  • Это делает ваш код уязвимым для ошибок, вызванных минимизацией: Try:

    var isTrue = true
    
    function doSomething() { return 'yeah' }
    
    function doSomethingElse() { return 'yes, dear' }
    
    doSomething()
    
    !isTrue && doSomethingElse()
    

    уменьшает:

    var isTrue=true;function doSomething(){return "yeah"}function doSomethingElse(){return "yes, dear"}doSomething()!isTrue&&doSomethingElse();
    

    что приводит к:

    SyntaxError: Unexpected token !
    
  • Это делает ваш код менее читабельным и удобным для обслуживания с точки зрения удобства: использование точки с запятой было по праву установлено как хорошая практика, и обученный разработчик JavaScript будет озадачен кодом, пытающимся избежать соглашения.

Другое дело, вы должны спросить себя: что вы на самом деле теряете точку с запятой?

  • Чистый код? Если вы хотите, чтобы JavaScript не выглядел как JavaScript, попробуйте Coffee Script. Но есть некоторые ошибочные понятия, которые считают, что ловушки, подобные упомянутым выше, очищаются "простым решением: когда строка начинается с круглых скобок, добавьте точка с запятой.". Как этот чистый код, и как это помогает любому, кто читает ваш код?

Bottom Line: с минимализацией я определенно попытаюсь использовать соглашения JSLint. Я видел, как некоторые люди, наконец, набрали код JavaScript после нескольких часов, пытаясь исправить ошибку, которая не происходит в unminified, но в сокращенном коде. Не вставляйте себя в это несчастье; точки с запятой могут быть уродливыми с первого взгляда, но они сохраняют ошибки.

Ответ 3

Не делай этого. Вставка с двумя двоеточиями - очень опасная вещь. Увеличение размера не стоит дополнительного риска.

Doulas Crockford не понравится вам, если вы это сделаете:) http://youtu.be/hQVTIJBZook

Ответ 4

Компиляторы и minifiers, вероятно, достаточно интеллектуальны, чтобы добавить точки с запятой, если это необходимо (и если это помогает процессу минимизации).

Однако! Точка с запятой говорит интерпретатору, что это конец инструкции. Если он отсутствует, он должен посмотреть на начало следующей строки, чтобы узнать, имеет ли смысл продолжать утверждение. Затем он примет решение, если следующая строка - это новый оператор (т.е. Точка с запятой отсутствует) или если это фактически продолжение оператора из предыдущей строки.

Без точек с запятой вы замедляете работу! Не говоря уже о том, что это может привести к некоторым неясным ошибкам, когда интерпретатор, выполняющий описанный алгоритм, решает неправильно!

Ответ 5

ИМХО, не делай этого. Вы на самом деле не получаете столько, а точка с запятой AFAIK размещена там автоматически, и ее можно поместить в место, где будут возникать странные ошибки.