Резюме:Язык JavaScript с самого начала был разработан с использованием точек с запятой, поэтому будьте осторожны при использовании правил кодирования без точек с запятой.
задний план
Недавно я начал использовать новый стандарт кодирования в проекте.В начале ESLint сообщал о множестве ошибок, из-за которых хотелось разбить клавиатуру.Я долго к этому привыкал.Вот некоторые представители правила:
- Используйте только одинарные кавычки
- Между скобками и открывающей фигурной скобкой определения функции должен быть пробел:
function(args) { .. } - Оператор импорта должен иметь место после фигурных скобок:
import { fa, fb } from moduleC - Никаких запятых! ! !
причина
При реализации функции утром я написалmapФункция для повторного использования частей кода. После запуска программы нет результата выполнения и не сообщается об ошибке. Через распечатку данных console.log обнаруживается, что вся программа никогда не зависнет после выполнения карты, что очень странно. Поскольку сообщения об ошибке нет, невозможно предположить конкретную причину. Итак, я абстрагировал его в очень простой код для устранения неполадок. Следующим образом:
console.log("hello, fundebug")
[1, 2, 3].map(i=>console.log(i))
Затем выполните, чтобы увидеть результат:
Ошибки в проекте нет, но код вынимается и выполняется под консолью браузера, но сообщает об ошибке!
Почему такой простой код неверен? Первая реакция заключается в том, что JS-движок сгенерирует синтаксическое дерево кода, оно может быть решено неправильно. Итак, я проверил точку с запятой в конце первой строки.
console.log("hello, fundebug");
[1, 2, 3].map(i=>console.log(i))
Это меня еще больше беспокоит: если отсутствие точки с запятой приведет к неправильной работе программы, почему вы до сих пор соблюдаете такой стандарт кодирования?
Поискав в Интернете ошибки JavaScript, связанные с точкой с запятой, я нашел много дискуссий о том, следует ли использовать точку с запятой.
Гроссмейстер Дуглас Крокфорд о правильном использовании точки с запятой
Цитирую минхана вБесконечная проблема JS с точкой с запятойОбсуждение в статье:
Создатель JSON, JSLint, JSMin и ADSafe, член комитета по стандартизации ECMA JavaScript 2.0, известный как мастер JavaScript Брендан Эйх, отец JavaScript, автор знаменитой книги «JavaScript: The Good Parts» (китайская версия « The Essence of JavaScript Language») Дуглас Крокфорд прямо пожаловался: «Этот код действительно безумно глупый X, я не буду сокращать серию JSMin для этого глупого случая X; TC39 рассматривает возможность использования «!» в качестве инфиксного оператора, этот код в ближайшее время не запустится. Исправьте это сейчас и научитесь правильно использовать точку с запятой. Знак «!» не является разделителем операторов, в отличие от «;».
JSMin не может правильно выполнить следующий код после обработки:
clearMenus()
!isActive && $parent.toggleClass('open')
Механизм автоматической вставки точки с запятой
В JavaScript есть механизм автоматической вставки точки с запятой (Automatic Semicolon Insertion), именуемый ASI. Это вспомогательная функция, и тут есть несколько случаев, на которые стоит обратить внимание:
Если вы пишете такой код:
return
a + b
Затем автоматическая точка с запятой будет вставлена следующим образом:
return;
a + b;
Условия, которые с большей вероятностью могут вызвать неявные ошибки:
a = b + c
(d + e).print()
Он не будет автоматически вставлять точку с запятой, потому что вторая строка начинается со скобки, которая будет ошибочно принята за функцию.
a = b + c(d + e).print();
Итак, код, который я только что написал, должен выглядеть так после автоматической вставки точки с запятой:
console.log("hello fundebug")[1,2,3].map(i=>console.log(i))
Так что кажется, что использование точки с запятой — самый безопасный способ!
Если вы не хотите ставить точки с запятой и боитесь проблем, детская туфля на v2ex даластенограмма:
Если вам не нравятся точки с запятой при написании кода JS, и вы не можете понять, когда нужно ставить точку с запятой, вы можете сделать это: в начале "(", "[" , "/", "+" , "-" Операторам предшествует точка с запятой.
Мое окончательное решение состояло в том, чтобы сначала объявить переменную, указывающую на массив, чтобы я мог не начинать с[в начале без точки с запятой:
let indexArray = [1, 2, 3]
indexArray.map(i=>console.log(i))
О Фундебаге
FundebugСосредоточьтесь на JavaScript, мини-программах WeChat, мини-играх WeChat, мини-программах Alipay, React Native, Node.js и мониторинге ошибок Java в режиме реального времени. С момента официального запуска Double Eleven в 2016 году Fundebug обработал более 600 миллионов ошибок и был признан многими известными пользователями, такими как Google, 360 и Kingsoft. Бесплатная пробная версия приветствуется!
Уведомление об авторских правах
Пожалуйста, указывайте автора при перепечатке FundebugИ адрес этой статьи:https://blog.fundebug.com/ 2018/09/18/js-semicolon-bug/
Ваши пользователи сталкиваются с ошибками?
Демонстрация опыта Бесплатное использование