Ответ 1
JSLint основан на предпочтениях Крокфорда (которые я разделяю в этом случае).
Это вопрос мнения, который "лучше".
(Хотя ясно, что его мнение правильно;)
Почему JSLint отчет в коде:
function cos(a) {
var b = 0;
if (a) {
b = 1;
}
else {
b = 2;
}
return b;
}
Ошибка:
Problem at line 6 character 5: Expected exactly one space between '}' and 'else'.
Эта ошибка может быть отключена, отключив опцию "Пустое пустое пространство" для JSLint.
Или, другими словами, почему синтаксис:
} else {
лучше, чем
...
}
else {
...
Google также использует синтаксис с формой } else {
.
Но я не понимаю, почему. Google упомянул о "неявной вставке с запятой", но в контексте открытия {
, не закрывая его.
Может ли Javascript вставить точку с запятой после закрытия }
блока if
, даже если следующий токен - это else
инструкция?
Извините, что мой вопрос немного хаотичен - я пытался думать громко.
JSLint основан на предпочтениях Крокфорда (которые я разделяю в этом случае).
Это вопрос мнения, который "лучше".
(Хотя ясно, что его мнение правильно;)
Это не вопрос стиля. Это работает ECMAScript.
К лучшему или к худшему, он будет автоматически вставлять точки с запятой в конце инструкций, где это необходимо.
JavaScript интерпретирует это:
function someFunc {
return
{
something: 'My Value'
};
}
Как это:
function someFunc {
return;
{
something: 'My Value'
};
}
Это, безусловно, то, чего вы не хотите.
Если вы всегда кладете скобку в ту же строку, что и оператор if
и if else
, вы не столкнетесь с такой проблемой.
Как и при любом языке кодирования, выбранный стиль кодирования должен быть таким, чтобы максимально минимизировать потенциальный риск.
Mozilla Developer Network также поддерживает тот же брекетинг строки: https://developer.mozilla.org/en-US/docs/User:GavinSharp_JS_Style_Guidelines#Brackets
JSLint здесь очень придирчив, просто применяя стиль, который вы не можете использовать.
Попробуйте JSHint:
Первоначально проект начинался с того, чтобы сделать более настраиваемую версию JSLint - та, которая не применяет один конкретный стиль кодирования для своих пользователей [...]
JSLint здесь просто придирчива. Парень, который написал его, также испек во многих стилистических предложениях, чтобы сохранить его собственный код более последовательным.
Что касается вставки с запятой, вам не стоит беспокоиться здесь. Вставка точки с запятой перед предложением else приведет к синтаксической ошибке, и автоматическая вставка точки с запятой происходит только в ситуациях, когда результирующий код все равно будет синтаксически действительным.
Если вы хотите больше узнать о вставке точки с запятой, я рекомендую эту приятную ссылку
В принципе, если вы вставляете точки с запятой всюду, вам нужно только быть осторожным, чтобы поставить аргумент "return" или "throw" (или метка для "break" и "continue" ) в той же строке.
И когда вы случайно забыли точку с запятой, единственными распространенными случаями, которые могут вас укусить, является то, что вы начинаете следующую строку с литерала массива (он может анализироваться как оператор индекса) или партизированного выражения (он может быть проанализирован как вызов функции)
Заключение
Если вы опускаете дополнительные точки с запятой или нет? Ответ - вопрос личные предпочтения, но должны быть сделаны на основе а не туманные страхи неизвестных синтаксических ловушек или несуществующие ошибки браузера. Если вы помните правила, приведенные здесь, вы оснащены, чтобы сделать свой собственный выбор, и прочитать любой JavaScript легко.
Если вы решите опустить точки с запятой, где это возможно, я советую вставьте их непосредственно перед открывающей скобкой или квадратом скобки в любом заявлении, которое начинается с одного из этих жетонов, или любого который начинается с одного из арифметических операторных токенов "/", "+" или "-", если вам нужно написать такое выражение.
Если вы опускаете точки с запятой или нет, вы должны помнить (возврат, разрыв, продолжение, бросок и приращение приращения и операторы декремента), и вы должны не стесняться использовать линейные разрывы везде, чтобы улучшить читабельность вашего кода.
Кстати, я лично считаю, что версия } else {
красивее. Прекратите настаивать на своих злых путях и присоединяется к нам на светлой стороне силы: P
Я только что закончил читать книгу под названием "Освоение высокой производительности JavaScript". Здесь я говорю под поправкой, но из того, что я могу собрать, является то, что "пустое пространство" действительно имеет значение.
Это связано с тем, как интерпретатор получает следующую функцию. Удерживая пробел до минимума (т.е.), Используя minifier, когда ваш код готов к развертыванию, вы фактически ускоряете процесс.
Если интерпретатору необходимо выполнить поиск по пробелу, чтобы найти следующее утверждение, это требует времени. Возможно, вы хотите протестировать это с помощью кода, который запускает цикл: 10000 раз с пробелом, а затем тот же самый код, который был сокращен.
Заявление перед началом цикла будет console.time
и, наконец, console.timeEnd
в конце цикла. Затем вы узнаете, сколько миллисекунд, которое цикл принял для вычисления.
Ошибка/предупреждение JSLint предлагает изменить код на
// naming convention winner? it subjective
} else if{
b = 2;
}
от
}
else if{
b = 2;
}
Это предотвращает вставить точки с запятой; считается более стандартным и условным.
большинство людей могли бы согласовать вкладку между
}tabelse if{
не самый популярный метод. Интересно, как размещается открывающий кронштейн { (пробел или нет), очевидно, оба они подвергнуты